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

Клиентские пакеты не пересылаются через туннель между узлами strongSwan IPsec для клиента и шлюза на одном сервере

У меня есть туннель IPsec между сайтами, настроенный с помощью strongSwan между моим виртуальным частным сервером CentOS 7 (общедоступный IP-адрес xxx233 для подсети 172.25.10.0/24) и сетью клиента (общедоступный IP-адрес yyy24 для подсети 10.9.200.0/24 ). Похоже, туннель подключается нормально, но я не могу заставить трафик проходить по нему. Я пытаюсь настроить подсеть 172.25.10.0/24 на том же хосте, который действует как шлюз, что, как я полагаю, я сделал неправильно.

В conn раздел ipsec.conf на VPS это:

conn customer
    esp=aes256-sha1-modp1024
    ike=aes256-sha1-modp1024
    keyexchange=ikev1
    authby=psk
    left=%defaultroute
    leftsubnet=172.25.10.0/24
    leftfirewall=yes
    right=y.y.y.24
    rightsubnet=10.9.200.0/24
    auto=start

Насколько я могу судить, сам туннель работает нормально. strongswan statusall на VPS показывает:

Security Associations (1 up, 0 connecting):
      customer[29]: ESTABLISHED 110 minutes ago, x.x.x.233[x.x.x.233]...y.y.y.24[y.y.y.24]
      customer[29]: IKEv1 SPIs: 0123456789abcdef_i* 0123456789abcdef_r, pre-shared key reauthentication in 50 minutes
      customer[29]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
      customer{88}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: 01234567_i 01234567_o
      customer{88}:  AES_CBC_256/HMAC_SHA1_96/MODP_1024, 0 bytes_i, 0 bytes_o, rekeying in 7 minutes
      customer{88}:   172.25.10.0/24 === 10.9.200.0/24

Я установил IP-адрес подсети (172.25.10.2) на VPS на том же интерфейсе, который содержит общедоступный IP-адрес (x.x.x.233) с помощью:

ip addr add 172.25.10.2/32 dev eth0

Но когда я пингую IP-адрес в удаленной сети с VPS, пинг не работает:

# ping -I 172.25.10.2 -c 3 10.9.200.254
PING 10.9.200.254 (10.9.200.254) from 172.25.10.2 : 56(84) bytes of data.

--- 10.9.200.254 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms

Tcpdump показывает мне, что туннель IPsec не используется:

# tcpdump -n host 10.9.200.254 or host y.y.y.24
03:51:07.193494 IP x.x.x.233 > 10.9.200.254: ICMP echo request, id 10193, seq 1, length 64
03:51:08.193449 IP x.x.x.233 > 10.9.200.254: ICMP echo request, id 10193, seq 2, length 64
03:51:09.193452 IP x.x.x.233 > 10.9.200.254: ICMP echo request, id 10193, seq 3, length 64

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

Как бы то ни было, я также выполнил следующие команды перед включением strongSwan:

# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
# sysctl -p
# firewall-cmd --zone=public --permanent --add-service="ipsec"
# firewall-cmd --zone=public --permanent --add-port=4500/udp
# firewall-cmd --zone=public --permanent --add-masquerade
# firewall-cmd --reload

В противном случае я не касался конфигурации машины / правил маршрутизации и т. Д.

Если у вас настроены какие-либо правила NAT, например MASQUERADE через --add-masquerade, вы должны исключить трафик, который соответствует политике IPsec, из получения. В противном случае этот трафик будет просто привязан к общедоступному IP-адресу и больше не будет соответствовать политике IPsec и не будет проходить через туннель. Как описано на strongSwan вики вам необходимо вставить следующее правило (перед любыми правилами NAT, которые -I пытается выполнить, если правила NAT уже установлены):

iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT

При необходимости может быть более конкретным (например, включать только определенные исходные IP-адреса). Я не знаю firewall-cmd так что я не уверен, как бы вы там это сделали. Но что-то вроде следующего (выполнено до --add-masquerade линия) может работать:

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -m policy --pol ipsec --dir out -j ACCEPT

Трафик IPsec должен маршрутизироваться, вы, вероятно, столкнетесь с проблемой NAT по умолчанию для правила NAT по умолчанию, влияющего на трафик IPsec. Лекарство такое:

iptables -t nat -I POSTROUTING 1 -m policy --pol ipsec --dir out -j ACCEPT

Или эквивалентная команда с firewall-cmd --add-rule.