doc:os:ubuntu:installing_company_s_gateway
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
doc:os:ubuntu:installing_company_s_gateway [d.m.Y H:i] – dbehterev | doc:os:ubuntu:installing_company_s_gateway [d.m.Y H:i] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Устанавливаем корпоративный шлюз (два провайдера) на базе Ubuntu Server ====== | ||
+ | Рассмотрим далее построение шлюза компании, | ||
+ | Шлюз будет построен на базе ОС Ubuntu Server 10.10. | ||
+ | Итак, пусть имеется такая схема подключения корпоративной сети к Интернет: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Задачи, | ||
+ | * построить корпоративный шлюз, выполняющий необходимую маршрутизацию между локальной сетью и провайдерами | ||
+ | * шлюз должен реализовывать функцию фаерволла для фильтрации входящего трафика | ||
+ | * также шлюз должен реализовывать VPN сервер | ||
+ | * а также кеширующий DNS сервер | ||
+ | |||
+ | Важнейшая составляющая задачи построения шлюза состоит в необходимости маршрутизации компьютеров локальной сети через провайдеров: | ||
+ | |||
+ | Этапы работы. | ||
+ | |||
+ | **1)** Установка ОС. Процесс установки подробно описан в сети, в частности вы можете посмотреть источник: | ||
+ | http:// | ||
+ | Некоторые замечания: | ||
+ | Итак, считаем, | ||
+ | |||
+ | **2)** Выполняем базовую настройку ОС. | ||
+ | - Задаем имя шлюза в / | ||
+ | - если нужно, меняем пароль для root: sudo passwd root | ||
+ | - если нужно, правим файл /etc/hosts | ||
+ | - выполняем обновление ПО системы: | ||
+ | - устанавливаем SSH сервер: | ||
+ | |||
+ | Выполняем настройку сетевых интерфейсов / | ||
+ | < | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | # WAN (ADSL) | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.1.10 | ||
+ | netmask 255.255.255.0 | ||
+ | network 192.168.1.0 | ||
+ | broadcast 192.168.1.255 | ||
+ | gateway 192.168.1.1 | ||
+ | ##metric 100 | ||
+ | dns-nameservers 192.168.1.1 | ||
+ | ## dns-nameserver IP1 IP2 | ||
+ | |||
+ | # WAN (WiMax) | ||
+ | auto wimax0 | ||
+ | |||
+ | iface wimax0 inet dhcp | ||
+ | |||
+ | # LAN | ||
+ | auto eth2 | ||
+ | iface eth2 inet static | ||
+ | address 192.168.0.250 | ||
+ | netmask 255.255.255.0 | ||
+ | network 192.168.0.0 | ||
+ | broadcast 192.168.0.255 | ||
+ | </ | ||
+ | |||
+ | **3)** Установка драйвера модема Yota. Linux был выбран не случайно: | ||
+ | Итак, поставим драйвер для модема Yota. Для этого с адреса http:// | ||
+ | - Заходим в консоль от имени рута (sudo -s). Распаковываем архив в отдельную папку. | ||
+ | - Выполняем скрипт ./ | ||
+ | - make (находимся в том же каталоге, | ||
+ | Если сборка и установка будет пройдена успешно, | ||
+ | < | ||
+ | # ifconfig | grep wimax | ||
+ | wimax0 | ||
+ | </ | ||
+ | |||
+ | **4)** Итак, ОС поставлена, | ||
+ | |||
+ | Источники: | ||
+ | - https:// | ||
+ | |||
+ | Выполняем: | ||
+ | < | ||
+ | sudo sh -c "echo 1 > / | ||
+ | </ | ||
+ | |||
+ | Добавляем в / | ||
+ | < | ||
+ | net.ipv4.conf.default.forwarding=1 | ||
+ | net.ipv4.conf.all.forwarding=1 | ||
+ | </ | ||
+ | |||
+ | **5)** Следующая задача состоит в настройке фаерволла iptables, который уже встроен в ядро. | ||
+ | Источники: | ||
+ | - https:// | ||
+ | - https:// | ||
+ | - http:// | ||
+ | |||
+ | Для начала, | ||
+ | Полученный код сохранил в текстовый файл, сделал его исполняемым. Выполнил. Проверил, | ||
+ | Замечания. | ||
+ | * Обратите внимание на сгенерированный код, если нужно, поправьте внутренние переменные. | ||
+ | * Обратите внимание на код, включающий маршрутизацию: | ||
+ | < | ||
+ | if [ " | ||
+ | then | ||
+ | echo " | ||
+ | else | ||
+ | $SYSCTL net.ipv4.ip_forward=" | ||
+ | fi | ||
+ | </ | ||
+ | Также, я закомментировал блок: | ||
+ | < | ||
+ | #if [ " | ||
+ | #then | ||
+ | # echo " | ||
+ | #else | ||
+ | # $SYSCTL net.ipv4.conf.all.rp_filter=" | ||
+ | #fi | ||
+ | </ | ||
+ | Почему это сделано, | ||
+ | Также закомментировал блок: | ||
+ | < | ||
+ | # if [ " | ||
+ | # then | ||
+ | # echo " | ||
+ | #else | ||
+ | # $SYSCTL net.ipv4.conf.all.log_martians=" | ||
+ | #fi | ||
+ | </ | ||
+ | Т.к. со всех сторон шлюза я получаю адреса из частной сети, фаерволл не пропускал такие пакеты при включенной опции net.ipv4.conf.all.log_martians. | ||
+ | * Блок: | ||
+ | < | ||
+ | $IPT -P INPUT DROP | ||
+ | $IPT -P OUTPUT DROP | ||
+ | $IPT -P FORWARD DROP | ||
+ | </ | ||
+ | задает политику по умолчанию - т.е. все, что явно не разрешено, | ||
+ | * Поскольку у меня к шлюзу подключены сразу два провайдера, | ||
+ | < | ||
+ | route del -net 0.0.0.0 dev eth0 | ||
+ | </ | ||
+ | Здесь я удалил маршрут по умолчанию к ADSL провайдеру (см. рис. выше), т.е. у меня остался всего один маршрут по-умолчанию к провайдеру Yota. Советую сразу команду по удалению маршрута по-умолчанию прописать в / | ||
+ | < | ||
+ | # WAN (ADSL) | ||
+ | auto eth0 | ||
+ | ... | ||
+ | up route del -net 0.0.0.0 dev eth0 | ||
+ | ... | ||
+ | </ | ||
+ | Что это дает? Каждый раз при старте компьютера будет удаляться один маршрут по-умолчанию. | ||
+ | |||
+ | Дальше, | ||
+ | Чтобы каждый раз при старте системы загружались сохраненные правила, | ||
+ | < | ||
+ | # WAN (ADSL) | ||
+ | auto eth0 | ||
+ | ... | ||
+ | pre-up iptables-restore < / | ||
+ | </ | ||
+ | Я прописал в секции eth0, хотя это не имеет значения, | ||
+ | |||
+ | **6)** Формирование таблиц маршрутизации | ||
+ | |||
+ | Источники: | ||
+ | - http:// | ||
+ | - http:// | ||
+ | |||
+ | Итак, на данный момент у нас имеется " | ||
+ | |||
+ | Для того, чтобы посмотреть текущую таблицу маршрутизации, | ||
+ | < | ||
+ | ip route show | ||
+ | route -n | ||
+ | </ | ||
+ | |||
+ | По-умолчанию в Линукс имеется три таблицы маршрутизации: | ||
+ | < | ||
+ | echo 4 4 >> / | ||
+ | </ | ||
+ | Тем самым мы создали новую таблицу маршрутизации с именем и порядковым номером, | ||
+ | Далее выполним команды: | ||
+ | < | ||
+ | echo "Erase the route..." | ||
+ | /bin/ip route flush cache | ||
+ | /bin/ip route flush table 4 | ||
+ | |||
+ | echo "Copy main routing table to adsl (ID 4) table" | ||
+ | /bin/ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table 4 $ROUTE ; done | ||
+ | /bin/ip route add table 4 default via eth0 | ||
+ | </ | ||
+ | Первые две команды очищают кеш таблиц маршрутизации, | ||
+ | Четвертая команда как раз добавляет запись о маршруте по-умолчанию для ADSL линии в таблицу 4. | ||
+ | |||
+ | Итак, мы хотим, чтобы наш компьютер в локальной сети с IP 192.168.0.90 выходил в сеть через ADSL провайдера, | ||
+ | < | ||
+ | $IPT -t mangle -A PREROUTING -s 192.168.0.90/ | ||
+ | /bin/ip rule add fwmark 4 table 4 | ||
+ | </ | ||
+ | Все, теперь все пакеты от 192.168.0.90 будут " | ||
+ | |||
+ | **Замечание.** | ||
+ | * после fwmark число должно указываться в шестнадцатеричном виде (тогда как в rt_tables значения добавляются в десятичном) | ||
+ | * в пункте 5 было закомментировано $SYSCTL net.ipv4.conf.all.rp_filter=" | ||
+ | * я создал отдельный скрипт касательно работы с таблицой маршрутизации: | ||
+ | < | ||
+ | #!/bin/sh | ||
+ | # | ||
+ | #if.up.sh | ||
+ | echo "Erase the route..." | ||
+ | |||
+ | INET_ADSL_GW=" | ||
+ | |||
+ | /bin/ip route flush cache | ||
+ | /bin/ip route flush table 4 | ||
+ | |||
+ | echo "Copy main routing table to adsl (ID 4) table" | ||
+ | |||
+ | /bin/ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table 4 $ROUTE ; done | ||
+ | /bin/ip route add table 4 default via $INET_ADSL_GW | ||
+ | |||
+ | /bin/ip rule add fwmark 4 table 4 | ||
+ | |||
+ | /bin/echo 0 > / | ||
+ | /bin/echo 0 > / | ||
+ | |||
+ | </ | ||
+ | и поместил вызов в соответствующий блок в / | ||
+ | < | ||
+ | # WAN (ADSL) | ||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 192.168.1.10 | ||
+ | netmask 255.255.255.0 | ||
+ | network 192.168.1.0 | ||
+ | broadcast 192.168.1.255 | ||
+ | gateway 192.168.1.1 | ||
+ | ##metric 100 | ||
+ | dns-nameserver 192.168.1.1 | ||
+ | pre-up iptables-restore < / | ||
+ | up / | ||
+ | up route del -net 0.0.0.0 dev eth0 | ||
+ | </ | ||
+ | |||
+ | **7)** Принуждение записи логов IPTABLES в отдельный файл | ||
+ | |||
+ | Я думаю, что многие сталкивались с проблемой, | ||
+ | - Выполняем команды:< | ||
+ | :msg, contains, "fw: " -/ | ||
+ | |||
+ | </ | ||
+ | - Самое главное: | ||
+ | - Создаем файл / | ||
+ | - Перезапускаем rsyslogd: < | ||
+ | - Убеждаемся, | ||
+ | |||
+ | TAG: {{tag> |