[freebsd] Туннель с клиентом за натом

Nick Kostirya nick at i11.co
Wed Jun 22 08:49:44 EEST 2022


On Wed, 22 Jun 2022 10:38:36 +0700
Eugene Grosbein <eugen at grosbein.net> wrote:

> 22.06.2022 9:34, Nick Kostirya via freebsd пишет:
> > Привет.
> > 
> > Вопрос про туннель с клиентом за натом.
> > 
> > 
> > Сервер: X.X.X.X                 192.168.12.1  (FreeBSD 12.3)
> > NAT:    Y.Y.Y.Y   192.168.0.1
> > Слиент:           192.168.0.5   192.168.12.5  (FreeBSD 12.3)
> > 
> > 
> > На сервере (X.X.X.X):
> > 
> > ifconfig gif0 create
> > ifconfig gif0 inet tunnel X.X.X.X Y.Y.Y.Y
> > ifconfig gif0 inet 192.168.12.1/24 192.168.12.5
> > 
> > 
> > На клиенте (192.168.0.5):
> > 
> > ifconfig gif0 create
> > ifconfig gif0 inet tunnel 192.168.0.5 X.X.X.X
> > ifconfig gif0 inet 192.168.12.5/24 192.168.12.1
> > 
> > 
> > TCP - работает, а вот UDP и ICMP дают дубликати.
> > 
> > При этом tcpdump показывает, что UDP уже на gif0 интерфейсе сервера, а ICMP echo дает дубликати ответа, видные tcpdump на клиенте, если пинговать с клиента и наоборот.
> > 
> > Аналогичная картина наблюдается для ipsec.
> > 
> > Как это объяснить и исправить?
> > 
> > Спасибо.  
> 
> не надо художественно излагать показания tcpdump. Их надо показывать.
> И ещё очень важно, что за роутер делает NAT. Потому что не любой NAT отроутит инкапсуляцию gif/IPIP,
> а если она дополнительно обёрнута ещё во что-то типа UDP (как это делает IPSec NAT-T),
> то это надо тоже явным образом описывать.
> 
> Потому что как сейчас описано - ничо не понятно.



UDP


На клиенте
# echo hello | nc -u 192.168.12.1 9999

# tcpdump -i gif0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif0, link-type NULL (BSD loopback), capture size 262144 bytes
08:42:41.200475 IP 192.168.12.5.14623 > 192.168.12.1.9999: UDP, length 6


На сервере получаю
# nc -u -l 9999
hello
hello


# tcpdump -i gif0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif0, link-type NULL (BSD loopback), capture size 262144 bytes
07:42:40.938382 IP 192.168.12.5.14623 > 192.168.12.1.9999: UDP, length 6
07:42:40.939678 IP 192.168.12.5.14623 > 192.168.12.1.9999: UDP, length 6


-----------------------------------

Ping


На клиенте.


# ping -c 3 192.168.12.1
PING 192.168.12.1 (192.168.12.1): 56 data bytes
64 bytes from 192.168.12.1: icmp_seq=0 ttl=64 time=112.012 ms
64 bytes from 192.168.12.1: icmp_seq=0 ttl=64 time=113.694 ms (DUP!)
64 bytes from 192.168.12.1: icmp_seq=1 ttl=64 time=112.483 ms
64 bytes from 192.168.12.1: icmp_seq=1 ttl=64 time=113.131 ms (DUP!)
64 bytes from 192.168.12.1: icmp_seq=2 ttl=64 time=114.567 ms

--- 192.168.12.1 ping statistics ---
3 packets transmitted, 3 packets received, +2 duplicates, 0.0% packet loss
round-trip min/avg/max/stddev = 112.012/113.177/114.567/0.899 ms


#  tcpdump -i gif0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif0, link-type NULL (BSD loopback), capture size 262144 bytes
08:22:30.774131 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 0, length 64
08:22:30.886033 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 0, length 64
08:22:30.887670 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 0, length 64
08:22:31.798535 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 1, length 64
08:22:31.910871 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 1, length 64
08:22:31.911573 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 1, length 64
08:22:32.807997 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 2, length 64
08:22:32.922373 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 2, length 64
08:22:32.923572 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 2, length 64


На сервере

# tcpdump -i gif0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif0, link-type NULL (BSD loopback), capture size 262144 bytes
07:22:30.566485 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 0, length 64
07:22:30.566501 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 0, length 64
07:22:30.567795 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 0, length 64
07:22:30.567807 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 0, length 64
07:22:31.590655 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 1, length 64
07:22:31.590669 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 1, length 64
07:22:31.591988 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 1, length 64
07:22:31.591996 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 1, length 64
07:22:32.602660 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 2, length 64
07:22:32.602675 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 2, length 64
07:22:32.603977 IP 192.168.12.5 > 192.168.12.1: ICMP echo request, id 39435, seq 2, length 64
07:22:32.603983 IP 192.168.12.1 > 192.168.12.5: ICMP echo reply, id 39435, seq 2, length 64



----------------------

Tenda F3 N300 написано, что есть поддержка: VPN - IPsec pass through


More information about the freebsd mailing list