Маршрутизация трафика между двумя туннелями IPsec

Я запускаю бэкэнд в инфраструктуре 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 , который я контролирую.

1
задан 7 December 2020 в 13:45
1 ответ

Мне удалось решить эту проблему с помощью правил 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.

0
ответ дан 4 December 2020 в 00:07

Теги

Похожие вопросы