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

15 views
Skip to first unread message

Nick Kostirya via freebsd

unread,
Jun 21, 2022, 10:35:07 PM6/21/22
to fre...@uafug.org.ua
Привет.

Вопрос про туннель с клиентом за натом.


Сервер: 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

Eugene Grosbein

unread,
Jun 21, 2022, 11:38:55 PM6/21/22
to Nick Kostirya, fre...@uafug.org.ua
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),
то это надо тоже явным образом описывать.

Потому что как сейчас описано - ничо не понятно.

Nick Kostirya via freebsd

unread,
Jun 22, 2022, 1:49:56 AM6/22/22
to fre...@uafug.org.ua

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

Eugene Grosbein

unread,
Jun 22, 2022, 5:13:08 AM6/22/22
to Nick Kostirya, fre...@uafug.org.ua
22.06.2022 12:49, Nick Kostirya via freebsd пишет:

Первый подозреваемый - роутер Tenda. Проверить это легко, нужно повторить тест с пингом
и tcpdump смотреть параллельно как на gif, так и на физическом интерфейсе, чтобы видеть,
а сколько реально пакетов приходит со стороны Tenda?

IPsec pass through это хорошо, но я не уловил, как именно настроен IPSec между хостами FreeBSD,
это тоже важно.

Nick Kostirya via freebsd

unread,
Jun 22, 2022, 6:51:24 AM6/22/22
to fre...@uafug.org.ua

Нашел. Это не в туннеле дело. :-)
И без туннеля дубликаты.
Пропинговал все IP, что показал traceroute, и увидел, что дубликаты делает один из маршрутизаторов на пути от клиента к серверу.

Спасибо.

Reply all
Reply to author
Forward
0 new messages