Вопрос про туннель с клиентом за натом.
Сервер: 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.
Как это объяснить и исправить?
Спасибо.
_______________________________________________
freebsd mailing list
fre...@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd
не надо художественно излагать показания 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
Первый подозреваемый - роутер Tenda. Проверить это легко, нужно повторить тест с пингом
и tcpdump смотреть параллельно как на gif, так и на физическом интерфейсе, чтобы видеть,
а сколько реально пакетов приходит со стороны Tenda?
IPsec pass through это хорошо, но я не уловил, как именно настроен IPSec между хостами FreeBSD,
это тоже важно.
Нашел. Это не в туннеле дело. :-)
И без туннеля дубликаты.
Пропинговал все IP, что показал traceroute, и увидел, что дубликаты делает один из маршрутизаторов на пути от клиента к серверу.
Спасибо.