Я запускаю бэкэнд в инфраструктуре DO, называя его site Yvi , который подключается к стороннему сайту Prov через туннель IPsec с этой конфигурацией libreswan:
conn prov-client
...
right=$YVI_IP
rightsourceip=10.31.3.1
rightsubnet=10.31.3.0/28
left=$PROV_IP
leftsubnet=10.70.0.36/28
Prov имеет сервер, работающий на 10.70.0.37
, и я могу взаимодействовать с ним из Yvi ].
Моя проблема в том, что я настраиваю локальную среду разработки (ящик Ubuntu в другой сети), и каждый раз, когда я вношу изменение, мне приходится развертывать его на Yvi , потому что только оттуда могу я получить доступ к API в Prov . Я бы хотел избежать этого, подключив Local к Yvi и направив этот трафик в Prov , чтобы иметь доступ к API в Prov ] из Локальный и упрощает разработку.
Я подключаю Local к Yvi в качестве дорожного воина со следующей конфигурацией:
conn remote-dev-client
...
left=$YVI_IP
leftsubnet=10.31.3.0/28
right=%any
rightaddresspool=10.31.4.1-10.31.4.254
Соединение установлено успешно, и с Local я могу связаться с 10.31.3.1
на Yvi . Я хочу достичь 10.70.0.37
в Prov из Local . Маршрут к сети 10.70.0.36/28
не добавляется автоматически, поэтому я попытался установить некоторые правила ip xfrm
и ip route
вручную на Local :
# Outgoing
ip xfrm policy add dst 10.70.0.37 src 10.31.4.1 dir out tmpl src $LOCAL_IP dst $YVI_IP proto esp spi $SPI reqid $REQID mode tunnel priority 100000
# Incoming
ip xfrm policy add dst 10.31.4.1 src 10.70.0.37 dir fwd tmpl src $YVI_IP dst $LOCAL_IP proto esp reqid $REQID mode tunnel priority 100000
ip xfrm policy add dst 10.31.4.1 src 10.70.0.37 dir in tmpl src $YVI_IP dst $LOCAL_IP proto esp reqid $REQID mode tunnel priority 100000
ip route add table 220 src 10.31.4.1 10.70.0.37 via $LOCAL_IP dev $LOCAL_IF proto static
Теперь я запускаю ip xfrm monitor
на Yvi , а затем из локального ping 10.70.0.37
; Я вижу пакеты, поступающие в Yvi (от монитора xfrm в Yvi ), но только исходящие, а не ответ (как это видно, если я пингую 10.31.3.1, например ), предполагая, что Yvi получает трафик, но не направляет его на Prov ? Я действительно не знаю, как это интерпретировать.
Я думаю, что мне нужно добавить маршруты в Yvi , чтобы правильно направить трафик в API Prov , но добавив аналогичные правила в те, что указаны выше, не работали. Буду признателен за помощь в понимании того, что мне не хватает и что я делаю неправильно.
Также приветствуются предложения по другому подходу, хотя это единственный способ подключиться к Prov , который я не контролирую, это через туннель IPsec от Yvi , который я контролирую.
Мне удалось решить эту проблему с помощью правил NAT iptables. Политики ip xfrm
не нужны. Это небольшое пояснение того, что я сделал, для того, кто, как и я, не является экспертом:
От Ивия назначаю дорожных воинов 10.31.4.0/24
. ] подсети, поэтому маршрут для этой сети автоматически устанавливается демоном ключей (в моем случае libreswan), поэтому я добавил правила NAT в Yvi( /etc/ufw/before.rules
, так как я использую UFW, но вы можете добиться того же с iptables
напрямую):
*nat
-F
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# PRE
-A PREROUTING -s 10.31.4.0/24 -d 10.31.3.2 -j DNAT --to-destination 10.70.0.37
# POST
-A POSTROUTING -s 10.31.4.0/24 -d 10.70.0.37 -j SNAT --to-source 10.31.3.1
COMMIT
*nat
указывает iptables применить правила к таблице NAT и COMMIT
фактически сохраняет правила. -F
просто для удобства, так как UFW добавляет правила в ufw enable
, но не удаляет их в ufw disabled
, так что вы получите дубликаты. , следовательно, флаг сброса -F
.
Правило PREROUTING
применяется к пакетам, поступающим из подсети RoadWarrior, предназначенным для 10.31.3.2
, и оно изменяет адрес назначения на 10.70. 0.37
вместо 10.31.3.2
, эффективно назначая этот IP-адрес серверу Provс точки зрения дорожных воинов.
Правило POSTROUTING
применяется к пакетам, входящим из подсети RoadWarrior, которые должны быть отправлены на 10.70.0.37
(то есть пакеты, которые только что попали в правило предварительной маршрутизации), и изменяет их адрес назначения из адреса в 10.31.4.0/0
до 10.31.3.1
.Это необходимо, потому что я не контролирую маршруты, сервер или что-либо в Prov, поэтому, если Provполучит запрос от 10.30.4.0/24
подсети, он не знал бы, как реагировать. Но он знает 10.31.3.1
.
И все! Теперь я могу связаться с Provиз Localчерез Yviпо адресу 10.31.3.2
.