Настроил VPN сервер (Strongswan ipsec, iptables) на локальном тестовом компьютере - все работает (Debian 10). И сервер и клиент в локальной сети за NAT.
- С сертификатами проблем нет (опускаю этот момент) - авторизация всегда проходит успешно.
- Настраиваю 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
- Добавляем в /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
- Настраиваем 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:
- /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
-
Обнаружил что rp_filter=1 для всех интерфейсов VPS - выставляю везде 0 - не помогает.
-
При помощи полных правил для 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 пакеты отфильтровать я могу, но что дальше? К сожалению, пока на этом мои познания заканчиваются. Как я могу быстро обнаружить проблему?