Есть полностью настроенный 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
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 не помогают.
Помогите, пожалуйста, с советом. Я в линуксе - можно сказать новичок.