SNAT не работает для сохранения реального клиентского IP, MASQUERADE работает

SNAT не работает для сохранения реального клиентского IP, MASQUERADE работает

У меня 3 хоста: AAA, BBB, CCC.

  1. ХозяинАААявляетсяOpenVPN-сервисг с IP172.17.10.1и маска 255.255.255.0.
  2. ХозяинВВВимеет 2 интерфейса Tun: •OpenVPN-серверс ИС172.16.10.1и маска 255.255.255.0 •OpenVPN-клиентс ИС172.17.10.50(подключен к OpenVPN-серверу AAA)
  3. ХозяинКССэто клиент OpenVPN с IP172.16.10.50(подключено к OpenVPN-серверу BBB).Имеет маршрутизацию к 172.17.10.0/24 через 172.16.10.1.

введите описание изображения здесь

Моя цель — чтобы хост CCC успешно пропинговал хост AAA, а хост AAA увидел трафик с исходного IP-адреса хоста CCC (172.16.10.50).

Я настроил iptables -A FORWARD... -J ACCEPTхост BBB.

На хосте BBB я настроилПОСТРОЕНИЕправило. Например, с MASQUERADE пинг проходит успешно, но проблема в том, что таким образом хост AAA видит src IP 172.17.10.50 (ip хоста BBB): iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE

Я меняю MASQUERADE на SNAT, но пинг не проходит: iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50

Проблема в том, что с помощью tcpdump я вижу, что трафик не выходит с хоста BBB и нет трафика на хост AAA:

root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64

Я попытался изменить SNAT на исходный IP 172.17.10.55(IP-адрес из сети 172.17.10.0/24), но пинг снова не проходит и трафик снова не выходит с хоста BBB:

iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55

12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64

Почему я не могу использовать SNAT с --to-source 172.16.10.50 или даже с --to-source 172.17.10.55(какой IP-адрес из той же сети 172.17.10.0/24) для ping-запроса на 172.17.10.1 с хоста CCC?

Похоже, что трафик сидит на хосте BBB и не выходит из его tun17. Я вижу, что трафик идет от HOST CCC к HOST BBB, трафик перенаправляется от tun16 к tun17, но затем его нельзя отправить на хост AAA с помощью SNAT.

Пинг работает только если исходный IP-адрес пакета 172.17.10.50. Если я изменю исходный IP-адрес на 172.17.10.55, например, пинг не проходит.

Я думаю, что проблема не в брандмауэре и не в маршрутизации, я подозреваю, что есть какие-то ограничения OpenVPN, но я не уверен. Два сервера OpenVPN находятся в --topology subnetрежиме с сетевыми масками /24.

решение1

Вам нужно добавитьrouteв ccd для управления внутренней таблицей маршрутизации openvpn.

В противном случае openvpn не знает, куда направить пакеты обратно. В журнале openvpn должна быть строка типа "MULTI: плохой исходный адрес от клиента [IP-АДРЕС], пакет отброшен"

Подробнее читайте здесь:

https://community.openvpn.net/openvpn/wiki/RoutedLans

Связанный контент