Ключевые слова:linux, gre, tunnel, nat, pptp, (найти похожие документы)
Date: Tue, 16 Dec 2003 21:26:31 +0500
From: Aleksey Barabanov <abb@wessen.ru>
Newsgroups: ftn.ru.linux
Subject: Эксперимент по поднятию GRE туннеля через NAT
1.Приватный хост. 10.0.0.2
--------------------------
# ip tunnel add net1 mode gre remote 192.168.0.1 local 10.0.0.2 ttl 255
# ip link set net1 up
# ip addr add 192.168.100.1 dev net1
# ip route add 192.168.100.0/24 dev net1
# ip addr sh
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
inet6 ::1/128 scope host
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:05:5d:74:dd:5d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0
inet6 fe80::205:5dff:fe74:dd5d/64 scope link
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
4: gre0@NONE: <NOARP> mtu 1476 qdisc noop
link/gre 0.0.0.0 brd 0.0.0.0
5: net1@NONE: <POINTOPOINT,NOARP,UP> mtu 1476 qdisc noqueue
link/gre 10.0.0.2 peer 192.168.0.1
inet 192.168.100.1/32 scope global net1
2.Маскарадер изнутри 10.0.0.1,eth1
3.Маскарадер снаружи 192.168.0.184, eth0
----------------------------------------
# modprobe iptables_nat
# modprobe ip_nat_pptp
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo "1" > /proc/sys/net/ipv4/ip_forward
4.Сервер 192.168.0.1
---------------------
# modprobe ip_gre
# ip tunnel add net1 mode gre remote 192.168.0.184 local 192.168.0.1 ttl 255
# ip link set net1 up
# ip addr add 192.168.100.2 dev net1
# ip route add 192.168.100.0/24 dev net1
# ip addr sh
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
inet6 ::1/128 scope host
[.....поскипаны реальные адреса моего рутера ;).....]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:c0:df:07:df:26 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2c0:dfff:fe07:df26/64 scope link
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:c0:df:08:72:ea brd ff:ff:ff:ff:ff:ff
inet6 fe80::2c0:dfff:fe08:72ea/64 scope link
5: zbr0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue
link/ether 00:c0:df:07:df:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global zbr0
inet6 fe80::2c0:dfff:fe07:df26/64 scope link
6: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
7: gre0@NONE: <NOARP> mtu 1476 qdisc noop
link/gre 0.0.0.0 brd 0.0.0.0
8: net1@NONE: <POINTOPOINT,NOARP,UP> mtu 1476 qdisc noqueue
link/gre 192.168.0.1 peer 192.168.0.184
inet 192.168.100.2/32 scope global net1
Все !
Теперь проверяем.
1.Приватный хост.
--------------------
# ifconfig net1
net1 Link encap:UNSPEC HWaddr
0A-00-00-02-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.100.1 P-t-P:192.168.100.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MTU:1476 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:664 (664.0 b) TX bytes:808 (808.0 b)
# ping -R -c 1 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(124) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=64 time=0.382 ms
RR: 192.168.100.1
192.168.100.2
192.168.100.2
192.168.100.1
- --- 192.168.100.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.382/0.382/0.382/0.000 ms
# ifconfig net1
net1 Link encap:UNSPEC HWaddr
0A-00-00-02-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.100.1 P-t-P:192.168.100.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:788 (788.0 b) TX bytes:956 (956.0 b)
2.Сервер.
-----------
# ping -R -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(124) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.431 ms
RR: 192.168.100.2
192.168.100.1
192.168.100.1
192.168.100.2
- --- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.431/0.431/0.431/0.000 ms
# ping -c 1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
- --- 10.0.0.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
# ping -c 1 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
>From xxx.xx.xx.xx: icmp_seq=1 Destination Host Unreachable
[здесь помарочка - ответ с реального адреса с реального дефолтного гейта ;)]
[оно и понятно, так как сетка 10.0.0.0 у меня маскарадится, а не рутится ]
- --- 10.0.0.2 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
--------------------------
Конечно это хак. Это будет жить нормально если только первые пакеты придут
со стороны маскированного хоста. Иначе коннтрак не сможет правильно его
размаскировать. Hо это и ясно. Туннель то ведь несимметричный. Если в этот
туннель воткнуть ppp, то после инициализации со стороны клента он будет
жить "вечно" за счет LCP.
Hу и естественно, описанное "решение" никак не отменяет тот факт, то и
обычный pptp туннель тоже прекрасно маскарадится.
From: Aleksey Barabanov <abb@wessen.ru>
> Что там в /proc/net/ip_conntrack на маскарадере? :)
Пинги это ж не сессия. Здесь только подсчет пакетов детально
продемонстрирован. И естественно в коннтраке в проц пусто.
Но сам коннтрак работает. Подождать немного и канал умирает. Прочистить и
снова пойдет. А загрузить на маскарадере ip_gre и, думаю, все встанет
колом.
Точнее я не разбирался в каком из модулей точно что как включено. Но в
рекомендациях указано, что надо только инициировать загрузку iptables_nat и
вроде как все далее само. Это первая половина правды. Действительно (думаю
это зависит от многого не разбирался от чего) если я первым его не грузил
туннел правильно не создавался. Автозагрузка все делала как-то не так. Но и
с ним, по опыту с pptp, приходилось еще руками грузить специфичные модули.
Вот для чистого gre я тоже добавил еще модуль.
Опять же не разбирался точно, но думаю что они просто друг у друга
перехватывают хуки. Но не буду настаивать.
From: opennet
Рекомендую по данному вопросу посмотреть на модули ip_nat_proto_gre и ip_conntrack_proto_gre
http://cvs.netfilter.org/netfilter-extensions/helpers/pptp/