LINUX.ORG.RU
решено ФорумAdmin

Strongswan ipsec, iptables VPN, нет проходят пакеты с VPS

 , , ,


1

0

Настроил VPN сервер (Strongswan ipsec, iptables) на локальном тестовом компьютере - все работает (Debian 10). И сервер и клиент в локальной сети за NAT.

  1. С сертификатами проблем нет (опускаю этот момент) - авторизация всегда проходит успешно.
  2. Настраиваю ipsec:
vi /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=192.168.1.6 (в случае VPS здесь его внешний IP)
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.0.0.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
vi /etc/ipsec.secrets
: RSA "server-key.pem"
user : EAP "password"

Перезапускаем ipsec restart

  1. Добавляем в /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.ip_no_pmtu_disc = 1

Запускаем sysctl -p

  1. Настраиваем iptables (по умолчанию все политики на ACCEPT)
iptables -F
iptables -Z
iptables -A FORWARD -j ACCEPT
iptables -t nat -F
iptables -t nat -Z
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

Этого достаточно для теста - VPN тунель работает, что подтверждает traceroute и tcpdump -i eth0 host 10.0.0.1 esp or upd port 4500

Все работает!

Переносим все тоже самое на VPS (Debian 11). Меняем IP в ipsec.conf, интерфейс в iptables. Запускаем - не работает. Авторизация есть, трафик доходит (что видно по каунтерам iptables), но назад не идет, при таких же настройках iptables как и локально.

Отличительные особенности VPS:

  1. /etc/network/interfaces
auto lo
iface lo inet loopback

# Auto generated venet0 interfaces
auto venet0
iface venet0 inet static
        address 127.0.0.1
        netmask 255.255.255.255
        broadcast 0.0.0.0
        up route add default dev venet0
auto venet0:0
iface venet0:0 inet static
        address xxx.xxx.xxx.xxx
        netmask 255.255.255.255
  1. Обнаружил что rp_filter=1 для всех интерфейсов VPS - выставляю везде 0 - не помогает.

  2. При помощи полных правил для FORWARD цепочки iptables вижу:

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination        
  107  7377 ACCEPT     all  --  *      *       10.0.0.0/24          0.0.0.0/0            policy match dir in pol ipsec proto 50
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            10.0.0.0/24          policy match dir out pol ipsec proto 50
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

В одну сторону идет - обратно уже нет.

Прошу помощи, в сетях не силен, но хотел бы расширить немного кругозор на эту тему. Как я могу продиагностировать ситуацию чтобы понять где теряются пакеты? tcpdump немного пользоваться я умею, ESP пакеты отфильтровать я могу, но что дальше? К сожалению, пока на этом мои познания заканчиваются. Как я могу быстро обнаружить проблему?

Ответ на: комментарий от anc

Все в соответсвии с /etc/sysctl.conf (как в п. 3)

cat /proc/sys/net/ipv4/ip_forward
1

rp_filter выключен

cat /proc/sys/net/ipv4/conf/*/rp_filter
0
0
0
0

iptables -L -n -v

Chain INPUT (policy ACCEPT 2986 packets, 295K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  479 32352 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 2245 packets, 289K bytes)
 pkts bytes target     prot opt in     out     source               destination            

iptables -L -n -v -t nat

Chain PREROUTING (policy ACCEPT 386 packets, 24735 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 166 packets, 9862 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  220 14873 MASQUERADE  all  --  *      venet0  10.0.0.0/24          0.0.0.0/0          
linuxuser123 ()
Ответ на: комментарий от linuxuser123

Ответ от поддержки VPS:

К сожалению, из-за ограничений в технологии контейнерной виртуализации OpenVZ, некоторое ПО не может работать на Вашем VPS, включая IPSec.

На этих тарифах VPS без проблем только работает OpenVPN и, если он Вам подойдет, мы будем рады помочь Вам его установить и настроить.

Перешел на KVM тариф - все заработало, всем спасибо, тему закрываем.

linuxuser123 ()
Ответ на: комментарий от linuxuser123

Немного оффтопа и для будущих поколений будет полезно. Аббревиатура VPS изначально появилась в вашем вопросе к ТП? Или только в их ответе?

anc ★★★★★ ()

Для справки: проблема в policy OpenVZ, требует исправления конфигурации на стороне ноды. https://bugs.launchpad.net/ubuntu/+source/strongswan/+bug/1309594/comments/8

Также strongSwan поддерживает работу через TUN/TAP, модуль kernel-libipsec.

ValdikSS ★★★★★ ()
Последнее исправление: ValdikSS (всего исправлений: 1)
Ответ на: комментарий от ValdikSS

Благодарю за ответ, думаю он будет полезен админам. Я же смотрю на всё это скорее со стороны пользователя, как и описано в теме.

linuxuser123 ()
Ответ на: комментарий от anc

Вопрос ТП полностью:

Не работает форвардинг или маскарадинг (либо SNAT) в iptables

Хотел бы иметь работающий Strongswan IPSec VPN на вашем VPS (строго для личного пользования). Проверенную конфигурацию VPN (работает в локальной сети) попытался перенести на ваш VPS - не работает.

/etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.ip_no_pmtu_disc = 1

sysctl -p
cat /proc/sys/net/ipv4/ip_forward
1

rp_filter тоже выключил в 0 на всех интерфейсах

политики все на ACCEPT
iptables -F
iptables -Z
iptables -A FORWARD -j ACCEPT
iptables -t nat -F
iptables -t nat -Z
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o venet0 -j MASQUERADE
(вариант с SNAT тоже пробовал)

ESP пакеты на VPS приходят, но не уходят никуда дальше. TUN/TAP подключил.
В ipsec status все нормально, клиент подключается, но запросы не уходят дальше.

Молю о подсказке. Помогите любителю, что я делаю не так? Видимо это связано с виртуализацией, может этот TUN/TAP нужно уже в моей конфигурации как-то донастроить?
linuxuser123 ()
Ответ на: комментарий от linuxuser123

Ну т.е. VPS это вы сформулировали?

anc ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.