Назад | Перейти на главную страницу

Правила NAT для маршрутизации VPN на публичный IP-адрес в локальной сети

Я пытаюсь настроить тестовую настройку VPN для маршрутизации эхо-запросов на общедоступный IP-адрес экземпляра. Корпоративный поставщик, к которому мы подключаемся, зарезервировал все личное пространство на своей стороне. Я не уверен, какие правила NAT мне нужны, чтобы получать трафик от экземпляра VPN-маршрутизатора на нашей стороне для перенаправления трафика на соответствующий экземпляр, находящийся за ним, на основе его общедоступного адреса, а не частного.

У меня топология вроде

A-сервер <-> A-VPN <--internet-> B-VPN <-> B-сервер.

VPN-туннель установлен, и я могу без проблем пинговать любую сторону через частный IP. Пинг общедоступного IP-адреса действительно попадает на виртуальную машину VPN на «другой» стороне, но останавливается на этом (я думаю, это видно по активности в «$ ip xfrm monitor»?).

Оба экземпляра VPN имеют публичный IP-адрес A-Server / 32 в разрешенных подсетях слева и справа, где это возможно.

Следование правилам NAT в экземпляре A-VPN, похоже, не работает, и я не уверен, неправильно ли я их использую или как отлаживать дальше.

iptables -t nat -A POSTROUTING -s <A-Server PRIVATE IP>/32 -d <B-Server PRIVATE IP>/32 -j SNAT --to-source <A-Server PUBLIC IP>
iptables -t nat -A PREROUTING -s <B-Server PRIVATE IP>/32 -d <A-Server PUBLIC IP>/32 -j DNAT --to-destination <A-Server PRIVATE IP>

Текущие правила A-VPN:

# iptables-save
# Generated by iptables-save v1.4.21 on Fri Feb 15 11:12:15 2019
*nat
:PREROUTING ACCEPT [2:168]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [21:1848]
:POSTROUTING ACCEPT [23:2016]
-A PREROUTING -s 172.31.24.75/32 -d <A-Server PUBLIC IP>/32 -j DNAT --to-destination 10.0.10.15
-A POSTROUTING -s 10.0.0.34/32 -d 172.31.24.75/32 -j SNAT --to-source <A-Server PUBLIC IP>
COMMIT
# Completed on Fri Feb 15 11:12:15 2019
# Generated by iptables-save v1.4.21 on Fri Feb 15 11:12:15 2019
*filter
:INPUT ACCEPT [104381:64450743]
:FORWARD ACCEPT [189:13956]
:OUTPUT ACCEPT [89586:3506732]
COMMIT
# Completed on Fri Feb 15 11:12:15 2019

После некоторого чтения и поддержки мне удалось решить проблему.

Предпринятые шаги:

'Левая сторона:

  • создал новый ElasticIP, не назначив его экземпляру.
  • добавлено <unallocated EIP> в левые подсети файла A-VPN .conf.
  • добавил эти правила iptables в A-VPN:
    • iptables -t nat -A PREROUTING -d <unallocated EIP> -j DNAT - пункт назначения <A-Server PRIVATE IP>
    • iptables -t nat -A РАЗМЕЩЕНИЕ -d <B-Server PRIVATE IP> -j SNAT - к источнику <unallocated EIP>

'Правая сторона:

  • добавлено <unallocated EIP> в правые подсети файла B-VPN .conf.
  • добавлено правило таблицы маршрутов подсети VPC для направления трафика на пункт назначения <unallocated EIP> пройти через B-VPN.

обе машины VPN:

  • Перезапустил ipsec.

На этом этапе tcpdump на всех машинах показывает правильную маршрутизацию и перезапись IP на всех машинах при пинге с B-сервера на A-Server через общедоступный IP-адрес. <unallocated EIP>