"Linux Advanced Routing & Traffic Control HOWTO (fb2) " - читать интересную книгу автора (Hubert Bert, Graf Thomas, Maxwell Gregory, van Mook Remco, van Oosterhout...)
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
А на маршрутизаторе сети B:
ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18
route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0
Когда вам нужно будет "разрушить" тоннель, выполните:
ifconfig tunl0 down
Вот и все. Через тоннель IP в IP нельзя передавать широковещательные пакеты или пакеты IPv6. Вы можете только соединить 2 сети IPv4, которые в обычной ситуации не могли бы работать друг с другом. При нынешнем положении вещей, совместимость этого кода доходит до ядер версии 1.3. Насколько я знаю, тоннелирование Linux IP-в-IP не работает с другими операционными системами и маршрутизаторами. Очень простое решение, если оно вам подходит - используйте его, если вам нужно больше - используйте GRE.