В ОС Linux поддерживаются 3 типа тоннелей. Это тоннелирование IP в IP, GRE тоннелирование и тоннели не-ядерного уровня (как, например, PPTP).
5.1. Несколько общих замечаний о тоннелях:
Тоннели могут использоваться для очень необычных и интересных вещей. Также они могут усугубить ситуацию, если они сконфигурированы неправильно. Не задавайте маршрут по умолчанию через тоннель, если только вы ТОЧНО не уверены в том, что делаете :-). Далее, тоннелирование увеличивает нагрузку на систему и сеть, потому что добовляются дополнительные IP-заголовки. Обычно, это 20 байт на пакет. Таким образом, если обычный размер пакета (MTU) в сети равен 1500 байтам, то при пересылке по тоннелю, пакет может содержать только 1480 байт. Это не обязательно становится проблемой, но помните о необходимости правильной настройки фрагментации пакетов, если вы соединяете большие сети. Ах да, и конечно самый быстрый способ "прорыть" тоннель — это "рыть" с обоих сторон.
5.2. Тоннелирование IP в IP.
Этот тип тоннелирования доступен в Linux уже давно. Для его работы требуются два модуля ядра: ipip.o и new_tunnel.o.
Допустим у вас есть три сети: внутренние сети A и B, и промежуточная сеть C (например, Internet). Итак, сеть A:
>сеть 10.0.1.0
>маска 255.255.255.0
>маршрутизатор 10.0.1.1
Адрес маршрутизатора в сети С — 172.16.17.18.
сеть B:
>сеть 10.0.2.0
>маска 255.255.255.0
>маршрутизатор 10.0.2.1
Адрес маршрутизатора в сети С — 172.19.20.21.
Мы полагаем, что сеть C передает пакеты от A к B и наоборот. Такой сетью может служить даже Internet.
Теперь, что нам нужно сделать?
Убедитесь, что все необходимые модули загружены:
>insmod ipip.o
>insmod new_tunnel.o
Теперь на маршрутизаторе сети A выполните:
>ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21
>route add –net 10.0.2.0 netmask 255.255.255.0 dev tunl0