LINUX.ORG.RU

Верно настроенный IPSec (Ubuntu) не пускает трафик

 , , , ,


0

1

Есть полностью настроенный ipsec (IKEv2) на VPS под Ubuntu 16.04, виртуализация OpenVZ.

apt-get install strongswan strongswan-plugin-eap-mschapv2 moreutils iptables-persistent

Конфиг:

#cat /etc/ipsec.conf
config setup
 charondebug="ike 1, knl 1, cfg 0"
 uniqueids=no

conn IPSec-IKEv2
 auto=add
 compress=no
 type=tunnel
 keyexchange=ikev2
 fragmentation=yes
 forceencaps=yes
 ike=aes256-sha1-modp1024,3des-sha1-modp1024!
 esp=aes256-sha1,3des-sha1!
 dpdaction=clear
 dpddelay=300s
 rekey=no
 left=%any
 leftid=XXX.XXX.XXX.XXX
 leftcert=/etc/ipsec.d/certs/vpn-server-cert.pem
 leftsendcert=always
 leftsubnet=0.0.0.0/0
 right=%any
 rightid=%any
 rightauth=eap-mschapv2
 rightsourceip=10.10.10.0/24
 rightdns=8.8.8.8,8.8.4.4
 rightsendcert=never
 eap_identity=%identity

# Android IPsec Hybrid RSA
conn IKEv1-Xauth
 also="IPSec-IKEv2"
 keyexchange=ikev1
 rightauth=xauth

Секреты:

#cat /etc/ipsec.secrets
XXX.XXX.XXX.XXX : RSA "/etc/ipsec.d/private/vpn-server-key.pem"
user1 %any% : EAP "password"
user2 %any% : XAUTH "password"

Правила iptables:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p udp --dport  500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A FORWARD --match policy --pol ipsec --dir in  --proto esp -s 10.10.10.0/24 -j ACCEPT
iptables -A FORWARD --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o venet0 -m policy --pol ipsec --dir out -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o venet0 -j MASQUERADE
iptables -t mangle -A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o venet0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

venet0 - это сетевой адаптер, вместо eth0

#ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:3278 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1177 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:269973 (269.9 KB)  TX bytes:488502 (488.5 KB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:XXX.XXX.XXX.XXX  P-t-P:XXX.XXX.XXX.XXX  Bcast:XXX.XXX.XXX.XXX  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
ip_forward выставлен, ещё куча флагов для ipv4 выставлено. Например, эти (после длительных танцов с бубнами):
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done

Я достаточно много тренировался на серверах DigitalOcean с Debian 9 и Ubuntu 16.04 - всё получалось отлично. У другого зарубежного хостера начались траблы. У него в панели управления есть возможно включить поддержку tun/tap, ppp, ipsec, я включил. Подключение к VPN из винды проходит без проблем. Но, когда с клиента пингую ya.ru, получаю это:

#tcpdump -n host 10.10.10.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
19:35:49.095778 IP 10.10.10.1.50451 > 224.0.0.252.5355: UDP, length 24
19:35:49.196600 IP 10.10.10.1.5353 > 224.0.0.251.5353: 0 PTR (QM)? _googlecast._tcp.local. (40)
19:35:49.198791 IP 10.10.10.1.5353 > 224.0.0.251.5353: 0 PTR (QM)? _googlecast._tcp.local. (40)
19:35:49.205975 IP 10.10.10.1.50451 > 224.0.0.252.5355: UDP, length 24
19:35:49.221418 IP 10.10.10.1.53438 > 8.8.8.8.53: 24545+ A? www.google.com. (32)
19:35:49.223710 IP 10.10.10.1.53438 > 8.8.4.4.53: 24545+ A? www.google.com. (32)
19:35:49.225843 IP 10.10.10.1.53438 > 212.122.1.2.53: 24545+ A? www.google.com. (32)
19:35:49.228126 IP 10.10.10.1.64994 > 8.8.8.8.53: 9061+ A? mtalk.google.com. (34)
19:35:49.230298 IP 10.10.10.1.64994 > 8.8.4.4.53: 9061+ A? mtalk.google.com. (34)
19:35:49.233059 IP 10.10.10.1.64994 > 212.122.1.2.53: 9061+ A? mtalk.google.com. (34)
19:35:49.412428 IP 10.10.10.1.137 > 255.255.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
19:35:49.658753 IP 10.10.10.1.60563 > 8.8.8.8.53: 24413+ A? clients4.google.com. (37)
19:35:49.660967 IP 10.10.10.1.60563 > 8.8.4.4.53: 24413+ A? clients4.google.com. (37)
19:35:49.662895 IP 10.10.10.1.60563 > 212.122.1.2.53: 24413+ A? clients4.google.com. (37)
19:35:49.789071 IP 10.10.10.1.138 > 255.255.255.255.138: NBT UDP PACKET(138)
19:35:49.807357 IP 10.10.10.1.138 > 255.255.255.255.138: NBT UDP PACKET(138)
19:35:49.809524 IP 10.10.10.1.63801 > 8.8.8.8.53: 8056+ A? ya.ru. (23)
19:35:49.914011 IP 10.10.10.1.61380 > 239.255.255.250.1900: UDP, length 133
19:35:50.174396 IP 10.10.10.1.137 > 255.255.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
19:35:50.625817 IP 10.10.10.1.61087 > 8.8.8.8.53: 36663+ A? www.msftncsi.com. (34)
19:35:50.628173 IP 10.10.10.1.61087 > 8.8.4.4.53: 36663+ A? www.msftncsi.com. (34)
19:35:50.630440 IP 10.10.10.1.61087 > 212.122.1.2.53: 36663+ A? www.msftncsi.com. (34)
19:35:50.812989 IP 10.10.10.1.63801 > 8.8.4.4.53: 8056+ A? ya.ru. (23)

Танцы с правилами iptables не помогают.

Помогите, пожалуйста, с советом. Я в линуксе - можно сказать новичок.

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

# uname -a Linux server 2.6.32-042stab126.2 #1 SMP Wed Dec 6 18:08:29 MSK 2017 x86_64 x86_64 x86_64 GNU/Linux

The following kernel modules must be loaded before container start: af_key esp4 esp6 xfrm4_mode_tunnel xfrm6_mode_tunnel Capability net_admin must be granted to a container

Думаю, возможность включения поддержки IPSec в панели управления включает какие-то нужные разрешения в контейнере.

evgepet ()

Я немного не догоняю:

# cat /proc/version Linux version 2.6.32-042stab126.2 (root@kbuild-rh6-x64.eng.sw.ru) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Dec 6 18:08:29 MSK 2017

При этом на сервере DigitalOcean вижу следующее:

# cat /proc/version Linux version 4.4.0-124-generic (buildd@lcy01-amd64-028) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) ) #148-Ubuntu SMP Wed May 2 13:00:18 UTC 2018

Почему версия такая низкая? На обоих VPS залита Ubuntu 16.04.

evgepet ()

Насчёт ядра в OpenVZ я уже нагуглил - используется ядро v2.6.* общее с хостом... Подскажите, пожалуйста, почему в туннель идут только днс запросы и только наружу?

evgepet ()