Допустим, у меня есть node1 и node2, подключенные через Интернет. Сервер приложений на узле node1 имеет IP acl для IP узла 2.
В целях безопасности я открываю туннель Wireguard между узлами. Я хотел бы сохранить настройки приложения такими же (отсюда "transparent" в заголовке вопроса), однако я столкнулся со следующей проблемой:
Node2 использует свой адрес источника vpn при общении с сервером приложений на узле 1, у которого нет этого IP-адреса в ACL.
Это обычная проблема в настройках VPN или просто выбор реализации Wireguard? Кто-нибудь знает элегантное решение? Дополнительная конфигурация на сетевом уровне подойдет.Изменение ACL на уровне приложения в данном случае не вариант
До сих пор я пробовал использовать публичный адрес node1 в качестве адреса vpn, вводя политику source-nat, но это ужасно не работает в случае защиты от проводов, которая добавляет статический маршрут удаленной конечной точки туннеля к таблице маршрутизации; что приводит к следующему:
Если вы хотите использовать свой «нормальный» IP-адрес хоста для исходящего трафика, который проходит через туннель, в моем случае достаточно сделать следующее:
[Interface]
Address = 10.102.0.1/24
PostUp = iptables -t nat -A POSTROUTING -s 10.102.0.1/32 -o wg-p2p -j SNAT --to-source 1.2.3.4
PostDown = iptables -t nat -D POSTROUTING -s 10.102.0.1/32 -o wg-p2p -j SNAT --to-source 1.2.3.4
...
[Peer]
AllowedIPs = 10.102.0.0/24, 1.2.3.4/32
...
Итак, в основном вы настраиваете простой туннель wireguard, и только с магией iptables вы меняете свой исходный адрес, если это IP-адрес источника туннеля, на ваш «нормальный» IP-адрес в последний момент (POSTROUTING
)