Скажем, у меня есть node1 и node2, подключенные через Интернет. Сервер приложений на узле node1 имеет IP acl для IP узла node2.
В целях безопасности я открываю туннель Wireguard между узлами. Я бы хотел, чтобы конфиги приложения остались прежними (отсюда и "прозрачный" в заголовке вопроса), однако я столкнулся со следующей проблемой:
Node2 использует свой адрес источника vpn при взаимодействии с сервером приложений на узле node1, у которого нет этого IP-адреса в его ACL.
Это обычная проблема в настройках VPN или просто выбор реализации Wireguard? Кто-нибудь знает элегантное решение? Дополнительная конфигурация на сетевом уровне подойдет. В этом случае изменение ACL на уровне приложения невозможно.
До сих пор я пробовал использовать публичный адрес node1 в качестве адреса vpn, вводя политику source-nat, но это ужасно не работает в случае Wireguard, который добавляет статический маршрут удаленной конечной точки туннеля в таблицу маршрутизации; что приводит к следующему:
если вы хотите использовать свой «нормальный» 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
...
Таким образом, в основном вы настраиваете простой туннель для защиты проводов, и только с помощью магии iptables вы меняете свой исходный адрес, если это IP-адрес источника туннеля, на свой `` нормальный '' IP-адрес в самый последний момент (POSTROUTING
)