Допустим некоторая организация открывает свой первый филиал и нужно быстро решить проблему связи локальных сетей головного офиса и филиала. В случае если доступ в интернет в обоих офисах осуществляется через шлюз под управлением Debian и оба офиса имеют реальные IP-адреса можно организовать GRE-туннель.
Протокол GRE создавался для организации туннелей и главным его достоинством является простота. Из недостатков стоит отметить отсутствие какого-либо шифрования, невозможность работать через NAT и необходимость использования постоянных IP-адресов по обе стороны туннелей. Однако если эти недостатки не являются критичными то можно приступать к настройке туннеля. Она не займёт много времени.
Допустим что в обоих офисах стоит шлюз под управлением Debian. На кажом сервере по две сетевые карты:
- eth0: Смотрит в интернет. В центральном офисе адрес 1.1.1.1, в филиале - 1.1.2.2;
- eth1: Смотрит в локальную сеть офиса. В центральном офисе: 192.168.101.1/24, в филиале - 192.168.102.1/24.
Установка необходимого ПО и настройка sysctl хорошо описаны в одной из предыдущих статей. Нас остаётся только:
- Настроить GRE-туннель;
- Настроить маршрутизацию;
- Настроить iptables.
На обоих серверах будет создан интерфейс tun0. В головном офисе он будет иметь адрес 172.17.254.1 а в филиале - 172.17.254.2. Маршрут на сеть другого офиса будет идти через этот интерфейс.
В файл /etc/network/interfaces в головном офисе добавим следующие строки:
auto tun0 iface tun0 inet static address 172.17.254.1 netmask 255.255.255.255 up ifconfig tun0 multicast pre-up iptunnel add tun0 mode gre local 1.1.1.1 remote 1.1.2.2 ttl 255 pointopoint 172.17.254.2 post-down iptunnel del tun0 post-up ip route add 192.168.102.0/24 dev tun0
В филиале в этот файл нужно добавить строки:
auto tun0 iface tun0 inet static address 172.17.254.2 netmask 255.255.255.255 up ifconfig tun0 multicast pre-up iptunnel add tun0 mode gre remote 1.1.1.1 local 1.1.2.2 ttl 255 pointopoint 172.17.254.1 post-down iptunnel del tun0 post-up ip route add 192.168.101.0/24 dev tun0
Далее нужно поднять на обоих серверах туннель командой:
ifup tun0
При поднятии интерфейса автоматически будут добавлять нужные маршруты (параметр post-up). Остаётся настроить iptables. Скрипт конфигурации на сервере головного офиса будет выглядеть примерно так:
#!/bin/sh # Минимальные настройки скрипта # Внешний интерфейс IF_EXT="eth0" # Внутренний интерфейс IF_INT="eth1" # Интерфейс GRE-туннеля IF_VPN="tun0" # Локальная сеть NET_INT="192.168.101.0/255.255.255.0" # Локальная сеть второго филиала NET_REMOTE="192.168.102.0/255.255.255.0" # На всякий случай сбрасываем все правила iptables -F iptables -F -t nat # Устанавливаем политики по умолчанию: # Никого не пускать iptables -P INPUT DROP # Всех выпускать iptables -P OUTPUT ACCEPT # Мимо нас никто не ходит iptables -P FORWARD DROP # Впускаем ответы на запросы, которые сами отправили iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешаем весь трафик на внутреннем интерфейсе iptables -A INPUT -i lo -j ACCEPT # Разрешаем весь трафик со стороны локальной сети iptables -A INPUT -i ${IF_INT} -s ${NET_INT} -j ACCEPT # Разрешаем GRE-трафик iptables -A INPUT -p gre -j ACCEPT # Разрешаем пересылку трафика из локальной сети через GRE-туннель в другой офис и обратно iptables -A FORWARD -i ${IF_INT} -s ${NET_INT} -o ${IF_VPN} -d ${NET_REMOTE} -j ACCEPT iptables -A FORWARD -i ${IF_VPN} -s ${NET_REMOTE} -o ${IF_INT} -d ${NET_INT} -j ACCEPT # NAT для локальной сети на внешнем интерфейсе iptables -t nat -A POSTROUTING -s ${NET_INT} -j MASQUERADE -o ${IF_EXT} # Разрешаем пересылку пакетов из локальной сети наружу iptables -A FORWARD -i ${IF_INT} -o ${IF_EXT} -s ${NET_INT} -j ACCEPT # Разрешаем пересылку в локальную сеть ответов на исходящие запросы iptables -A FORWARD -i ${IF_EXT} -o ${IF_INT} -d ${NET_INT} -m state --state RELATED,ESTABLISHED -j ACCEPT
В филиале скрипт будет выглядеть точно так же, только значения параметров NET_INT и NET_REMOTE нужно поменять местами.
На этом всё. Приятной работы!
Anonymous 2010-12-28 10:28:43 (#)