Linux Advanced Routing & Traffic Control HOWTO (Hubert, Graf) - страница 13

А на маршрутизаторе сети 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.

5.3. GRE тоннели.

GRE это протокол тоннелирования, который был разработан фирмой Cisco. Он может немного больше чем тоннелирование IP-в-IP. Например, вы можете пересылать широковещательную передачу и IPv6 через тоннель GRE.

В ОС Linux вам будет нужен модуль ip_gre.o.

5.3.1. Тоннелирование IPV4.

Давайте сначала разберемся с тоннелированием IPv4:

Допустим у вас есть три сети: внутренние сети A и B, и промежуточная сеть C (например, Internet).

Сеть А:

>сеть          10.0.1.0

>маска         255.255.255.0

>маршрутизатор 10.0.1.1

Адрес маршрутизатора в сети С — 172.16.17.18. Назовем эту сеть neta (крайне оригинально)

сеть B:

>сеть          10.0.2.0

>маска         255.255.255.0

>маршрутизатор 10.0.2.1

Адрес маршрутизатора в сети С — 172.19.20.21. Назовем эту сеть netb

Мы полагаем, что сеть C передает пакеты от A к B и наоборот. Как и почему — это нас не интересует.

На маршрутизаторе сети A, вам необходимо сделать следующее:

>ip tunnel add netb mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255

>ip link set netb up

>ip addr add 10.0.1.1 dev netb

>ip route add 10.0.2.0/24 dev netb

Давайте немного обсудим эти команды. В первой строке мы добавляем тоннельное устройство и присваиваем ему имя netb (имея при этом ввиду место, куда мы хотим попасть). Потом мы сообщаем, что хотим использовать протокол GRE (mode gre), удаленный адрес 172.19.20.21 (второй маршрутизатор), и адрес с которого должны отправлятся данные, предназначенные для передачи по этому тоннелю — 172.16.17.18 (это позволяет вашему маршрутизатору иместь несколько IP-адресов в сети C и оставлять возможность выбора конкретного адреса для тоннеля) и, наконец, TTL-поле пакета должно равняться 255 (ttl 255).

Вторая строка переводит устройство в активное состояние.

В третьей строке мы присваиваем созданному интерфейсу born адрес 10.0.1.1. Это нормально для небольших сетей, но когда вы становитель "шахтером" (т.е. создаете МНОГО тоннелей), возможно вам нужно будет выбрать другой диапазон адресов для тоннельных интерфейсов (в этом примере мы могли бы использовать 10.0.3.0).