IP туннель на Linux


IP туннель создается для того чтобы связать два сетевых узла и обеспечить обособленный канал связи с одной адресацией с по сети общего доступа. Данные при передаче по туннелю обычно, но не всегда шифруются.



Применяется 3 типа туннелей:


  • IP — IP туннели
  • GRE туннели
  • туннели, существующие за пределами ядра (например, PPTP)


Рассмотрим построение IP-IP туннелей, как и GRE такие туннели представляют собой самый простой способ связи двух узлов, соединить напрямую которые невозможно.

Например, удаленные офисы. IP-IP применяется для связи сетевого оборудования — в рассмотренном ниже примере — серверов под Linux.



Туннели ip ip в Linux


Механизм туннелирования делает возможным присутствие двух модулей ядра:

new_tunnel.o

ipip.o



Используются ли они можно проверить через insmod, чаще всего они будут, но при отсутствии ядро можно перекомпилировать

insmod ipip.o

insmod new_tunnel.o



Если модули присутствуют ошибок не возникнет. Также проверить можно выполнив lsmod | grep ipip и lsmod | grep new_tunnel.

Комнады выводят список доступных модулей и потом в нём ищут нужные в данном случае.



Пример вывода в случае когда модулей нет:

IP туннель


Настройка IP туннелирования в Linux


Рассмотрим процесс настройки. Имеется 3 сети: внутренние A и B, внешняя сеть с общим доступом C (Internet).



Указанные адреса в сети C при выполнении настроек нужно заменить на выделенные серверу публичные адреса, адреса из приватной сети можно использовать такие же




Для сети A существуют следующие настройки:

network 10.0.1.0
netmask 255.255.255.0
router 10.0.1.1

В сети С роутер имеет адрес 123.123.123.123



Для сети В заданы настройки:

network 10.0.2.0
netmask 255.255.255.0
router 10.0.2.1

В сети С роутер имеет адрес 124.124.124.124



Настройки на роутере сети А


Создаем туннельный интерфейс указывая публичные адреса с одной стороны туннеля и с другой.

ip tunnel add tunl11 mode ipip remote 124.124.124.124 local 123.123.123.123


Весь трафик, приходящий на локальный роутер направляем на роутер, принадлежащий сети В


ifconfig tunl11 10.0.1.1 pointopoint 124.124.124.124



Добавляем маршрут к сети В через туннель

route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl11



Настройки на роутере сети В


Также создаём туннельный интерфейс

ip tunnel add tunl11 mode ipip remote 123.123.123.123 local 124.124.124.124


Весь трафик, приходящий на локальный роутер направляем на роутер, принадлежащий сети A


ifconfig tunl11 10.0.2.1 pointopoint 123.123.123.123



Добавляем маршрут к сети А через туннель

route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl11





На обоих серверах добавляется туннельный интерфейс tunl11, он должен отображаться в списке при выполнении ip a, у него должно быть состояние UP.


состояние туннельного интерфейса


Если интерфейс не поднялся автоматически переводим его в состояние UP:

ip link set up tunl11



туннельный интерфейс


Добавленные маршруты к подсетям можно посмотреть командой ip r l.



Как удалить IP туннель


Чтобы удалить ненужный более туннель с обеих сторон нужно выполнить

ifconfig tunl11 down



Также можно просто перезагрузить сервер.

Настройки выполнены в работающей системе, если требуется чтобы они сохранялись после перезагрузки их нужно перенести в конфигурационные файлы сети серверов.



Настройки для автоподгрузки правил для туннеля


Реализовать загрузку правил можно по разному. Рассмотрим способ с bash скриптом, который добавляется в /etc/network/interfaces как post-up /opt/createtunnel.sh (актуально для Ubuntu/Debian)



mcedit /opt/createtunnel.sh

#!/bin/bash
/sbin/ip tunnel add tunl11 mode ipip remote 124.124.124.124 local 123.123.123.123 dev eth0
/sbin/ifconfig tunl11 10.0.1.1 netmask 255.255.255.252 pointopoint 10.0.2.1
/sbin/ifconfig tunl11 mtu 1500
/sbin/ifconfig tunl11 up


Также скрипт можно добавить в /etc/rc.local



Через такой туннель нельзя переправлять IPv6 трафик, туннель просто соединяет 2 IPv4 сети для которых без туннеля возможность обмениваться трафиком напрямую отсутствовала бы.



IP IP туннели применяются очень часто для организации канала связи между Linux серверами.

Стандартом для связи активных сетевых устройств (роутером, фаерволов) является IPSec

Сказать спасибо