Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.
Возникают ситуации, в которых необходимо соединить удаленные UNIX-сервера туннелем. Например, для того, чтобы получить доступ к удаленной внутренней сети, соединить внутренние сети серверов виртуализации или же необходимо предоставить локальным пользователям определенные сервисы из удаленной сети. Одним из самых простых в настройке туннелей является IPIP-туннель. О его настройке и пойдет речь в этой заметке.
Стоит отметить, что удобство использования IPIP-туннеля состоит еще в том, что его можно настроить как на UNIX-системах, так и на роутерах Mikrotik или Cisco. В дистрибутиве Centos7 уже имеется все необходимое для создания IPIP-туннеля. Служебные скрипты для настройки сети и сами конфигурационные файлы хранятся по традиции в каталоге /etc/sysconfig/network-scripts/.
Итак, обозначим исходные данные, которые необходимы для настройки туннеля.
Имеем два сервера виртуализации под управлением Centos7 со следующими внешними IP-адресами:
srv-kvm1 WAN: 111.112.113.114
srv-kvm2 WAN: 121.122.123.124
На каждом сервере имеется виртуальная локальная сеть:
srv-kvm1 LAN: 10.1.1.0/24
srv-kvm2 LAN: 10.1.2.0/24
И нам необходимо соединить эти виртуальные локальные сети посредством IPIP-туннеля со следующими параметрами:
srv-kvm1 IPIP: 10.10.1.1/30
srv-kvm2 IPIP: 10.10.1.2/30
Создаем файл ifcfg-tun0 на сервере srv-kvm1 со следующим содержимым:
DEVICE=tun0
MY_OUTER_IPADDR=111.112.113.114
PEER_OUTER_IPADDR=121.122.123.124
MY_INNER_IPADDR=10.10.1.1/30
PEER_INNER_IPADDR=10.10.1.2/30
TYPE=IPIP
TTL=255
ONBOOT=yes
На сервере srv-kvm2 создаем такой же файл, с зеркальной заменой адресов:
DEVICE=tun0
MY_OUTER_IPADDR=121.122.123.124
PEER_OUTER_IPADDR=111.112.113.114
MY_INNER_IPADDR=10.10.1.2/30
PEER_INNER_IPADDR=10.10.1.1/30
TYPE=IPIP
TTL=255
ONBOOT=yes
Думаю, описывать содержимое этих файлов не стоит, и так все понятно :)
Теперь необходимо создать таблицу маршрутизации для нашего интерфейса на каждом сервере. В файл /etc/iproute2/rt_tables добавляем строку:
100 tabletun0
Опишем правила маршрутизации. На сервере srv-kvm1 создаем файл rule-tun0 cо следующим содержимым:
from 10.10.1.1 lookup tabletun0
На втором сервере:
from 10.10.1.2 lookup tabletun0
Опишем необходимые маршруты. Для этого на сервере srv-kvm1 в файле route-tun0 запишем:
default dev tun0 table tabletun0
10.1.2.0/24 dev tun0
На втором сервере:
default dev tun0 table tabletun0
10.1.1.0/24 dev tun0
В настройках iptables каждого сервера нужно разрешить принимать протокол ipip.
На srv-kvm1:
# iptables -A INPUT -p ipip -s 121.122.123.124 -j ACCEPT
На srv-kvm2:
# iptables -A INPUT -p ipip -s 111.112.113.114 -j ACCEPT
Поднимаем интерфейс командой:
# ifup tun0
На этом настройка закончена. В результате нам удалось соединить две виртуальные локальные сети IPIP-туннелем, который будет автоматически подниматься после перезагрузки серверов со всеми необходимыми маршрутами.