Fri 17 Mar 2006
Иногда бывают ситуации, когда мне необходимо соединить удаленные 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=8051mtu 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
Вот и все! Теперь у нас есть “прямое” соединение между серверами и мы можен настраивать маршрутизацию, используя этот линк.
- Linux User in Solaris 10 Survival Guide
- Nginx - Маленький, Но Очень Мощный И Эффективный Web-Сервер
- Прозрачное Соединение Двух Удаленных Локальных Сетей (Remote Bridging)
- Настройка и оптимизация Red Hat Enterprise Linux для баз данных Oracle 9i и 10g
- Как получить “не зависящий от провайдера” IP-адрес для домашнего сервера?

March 17th, 2006 at 6:55 pm
[...] A nice step by step how to for creating an IP tunnel between FreeBSD and Linux. My only concern is that there is no discussion on encrypting this tunnel, so be careful about what you use this for. [...]
June 6th, 2006 at 7:26 am
# ifconfig tun0 10.0.0.1 netmask 255.255.255.252 \
> pointopoint 10.0.0.1
ошибочка - должно быть так:
ifconfig tun0 10.0.0.1 netmask 255.255.255.252 \
> pointopoint 10.0.0.2
June 9th, 2006 at 3:42 pm
У меня вот возник вопрос: как быть если число серверов больше двух? Настраивать туннели попарно? Или можно это сделать по-другому? У меня 14 подсетей
July 27th, 2006 at 7:39 am
For which version of FreeBSD is this example intented? I tryed it on 5.2.1 and there is no gifconfig command.
July 27th, 2006 at 2:31 pm
I’ve tried it in 4.X, but I think, that this command should be in 5.X and 6.X. maybe they’ve changed its name… Try to use Google
January 25th, 2007 at 1:47 am
In 5.x and 6.x the gifconfig command is included in the ifconfig command itself as an option “tunnel”.
May 14th, 2007 at 4:11 pm
[...] [3] http://blog.kovyrin.net/2006/03/17/how-to-create-ip-ip-tunnel-between-freebsd-and-linux/ [...]
May 17th, 2007 at 3:26 pm
Very good, I’ve tested just the linux part and it works fine.
MAny Thanks
August 9th, 2007 at 9:11 am
Народ а расскажите можно ли теперь этот IP-тунель криптовать Racoon-ом???
October 19th, 2007 at 10:58 am
можно и нужно