Иногда бывают ситуации, когда мне необходимо соединить удаленные Unix-сервера тунелем для того, чтобы предоставить локальным пользователям определенные сервисы из удаленной сети или просто для того, чтобы получить доступ к удаленной внутренней сети. Я был очень удивлен, когда мой знакомый, молодой сисадмин, спросил меня о том, как поднять IP-IP тунель между разными операционными системами (в его случае: FreeBSD и Linux) и сказал, что не может найти информацию по этому вопросу. Как результат моих с ним изысканий появилось это HOWTO.
Давайте для начала посмотрим, что у нас есть и что нам надо получить в итоге.
Мы имеем 2 сервера:
- Server1:
- ОС: Linux
- Сетевой интерфейс: eth0
- IP: 100.100.100.100
- Server2:
- ОС: FreeBSD
- Сетевой интерфейс: fxp0
- IP: 200.200.200.200
Нам необходимо получить IPv4 over IPv4 тунель со следующими параметрами между указанными серверами:
- Server1: 10.0.0.1 / 255.255.255.252
- Server2: 10.0.0.2 / 255.255.255.252
Для настройки описанной конфигурации на Linux-сервере нам нужно выполнить следующие шаги:
- Создадим ipip-тунельный интерфейс:
# ip tunnel add tun0 mode ipip \\ > remote 200.200.200.200 local 100.100.100.100 dev eth0
- Установим IP-адреса:
# ifconfig tun0 10.0.0.1 netmask 255.255.255.252 \\ > pointopoint 10.0.0.2
- Установим MTU и поднимем интерфейс:
# ifconfig tun0 mtu 1500 up
Теперь на Linux-сервере мы имеем следующий интерфейс:
linux:~# ifconfig tun0 tun77 Link encap:IPIP Tunnel HWaddr inet addr:10.0.0.1 P-t-P:10.0.0.2 Mask:255.255.255.252 UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:504 (504.0 b) TX bytes:624 (624.0 b)
Следующим шагом будет настройка конца тунеля на стороне FeeeBSD-сервера:
- Создаем gif-интерфейс для тунеля:
# # ifconfig gif0 create
- Устанавливаем транспортные IP-адреса:
# gifconfig gif0 inet 200.200.200.200 100.100.100.100
- Устанавливаем IP-адреса тунеля:
# ifconfig gif0 10.0.0.2 netmask 255.255.255.252 10.0.0.1
- Устанавливаем MTU и поднимаем интерфейс:
# ifconfig gif0 mtu 1500 up
В результате на стороне FreeBSD видим следующее:
# ifconfig gif0 gif0: flags=8051 mtu 1500 tunnel inet 200.200.200.200 --> 100.100.100.100 inet 10.0.0.2 --> 10.0.0.1 netmask 0xfffffffc
Для проверки результатов можно использовать утилиту ping на любой из сторон тунеля. Ны проверим со стороны Linux-сервера:
linux:~# ping -c 4 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.139 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.138 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.138 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.136 ms --- 172.17.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2997ms rtt min/avg/max/mdev = 0.136/0.137/0.139/0.014 ms
Вот и все! Теперь у нас есть “прямое” соединение между серверами и мы можен настраивать маршрутизацию, используя этот линк.
Источник