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.