У меня есть существующий Openswan VPN, который неплохо работает с Windows, Mac и телефонами.
[Office 192.168.0.0/24 visible---[VPN A.B.C.D] ---- [Интернет] --- [Домашние маршрутизаторы (NAT), динамические IP-адреса] ---- [Рабочие станции]
Теперь я хочу запустить внешний резервный сервер и подключить его к той же VPN, но с динамическим IP.
[Office 192.168.0.0/24 visible---[VPN A.B.C.D] ---- [Интернет] --- [Домашний маршрутизатор (NAT), динамический IP-адрес] ---- [zfsbackup]
IPSec, похоже, согласен, это результат на стороне резервного копирования:
104 "net2net" #1: STATE_MAIN_I1: initiate
003 "net2net" #1: received Vendor ID payload [Openswan (this version) 2.6.38 ]
003 "net2net" #1: received Vendor ID payload [Dead Peer Detection]
003 "net2net" #1: received Vendor ID payload [RFC 3947] method set to=115
106 "net2net" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "net2net" #1: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike (MacOS X): i am NATed
108 "net2net" #1: STATE_MAIN_I3: sent MI3, expecting MR3
003 "net2net" #1: received Vendor ID payload [CAN-IKEv2]
004 "net2net" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=aes_256 prf=oakley_sha group=modp1024}
117 "net2net" #2: STATE_QUICK_I1: initiate
004 "net2net" #2: STATE_QUICK_I2: sent QI2, IPsec SA established transport mode {ESP=>0x9fecb28d <0x11f39e30 xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=none DPD=enabled}
Однако когда я пытаюсь установить соединение в xl2tpd, происходит следующее:
xl2tpd[14438]: Listening on IP address 0.0.0.0, port 1701
xl2tpd[14438]: get_call: allocating new tunnel for host A.B.C.D, port 1701.
xl2tpd[14438]: Connecting to host A.B.C.D, port 1701
xl2tpd[14438]: control_finish: message type is (null)(0). Tunnel is 0, call is 0.
xl2tpd[14438]: control_finish: sending SCCRQ
xl2tpd[14438]: network_thread: select timeout
...
Выполнение захвата пакетов на машине на этом этапе показывает, что по сети ничего не передается.
Что меня беспокоит, так это вывод журнала при подключении. Это боковой журнал Office для подключения к Windows:
"L2TP"[6] W.X.Y.Z #115: STATE_QUICK_R2: IPsec SA established transport mode {ESP=>0x917a3b5e
<0xbc445896 xfrm=AES_128-HMAC_SHA1 NATOA=192.168.1.106 NATD=W.X.Y.Z:4500 DPD=none}
Это для резервного сервера (та же сеть, что и для ПК с Windows выше), обратите внимание на порт 1024
"L2TP"[11] W.X.Y.Z #23: STATE_QUICK_R2: IPsec SA established transport mode {ESP=>0x11f39e30
<0x9fecb28d xfrm=AES_128-HMAC_SHA1 NATOA=192.168.1.2 NATD=W.X.Y.Z:1024 DPD=enabled}
ipsec verify показывает, что pluto прослушивает 500 и 4500. Я не могу найти способ заставить IPSec проходить через правильный номер порта. Мой программист полагает, что порт не читается ниоткуда и по умолчанию используется первый назначаемый порт пользовательского пространства.
Обратите внимание, что я могу зарезервировать 1024 заранее, используя nc. Office VPN по-прежнему получает указание использовать 1024, а не 1025. Плутон не жалуется, что 1024 уже используется.
nc -u -p 1024 localhost 22
Я действительно надеюсь, что кто-то может помочь - потратил несколько часов на поиск и настройку.
Конфигурация офиса выглядит следующим образом:
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey
plutostderrlog=/var/log/pluto.log
nhelpers=0
conn L2TP
authby=secret
auto=add
pfs=no
type=transport
rekey=yes
compress=no
left=203.39.25.66
leftnexthop=%defaultroute
leftprotoport=17/1701
right=%any
rightsubnet=vhost:%no,%priv
rightprotoport=17/%any
forceencaps=no
dpddelay=40
dpdtimeout=130
dpdaction=clear
Конфигурация резервного сервера:
version 2.0
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off
protostack=netkey
plutostderrlog=/var/log/pluto.log
conn net2net
authby=secret
pfs=no
auto=add
ike=aes256-sha1;modp1024
compress=no
keyingtries=3
dpddelay=40
dpdtimeout=130
dpdaction=clear
rekey=yes
type=transport
left=%defaultroute
leftsubnet=192.168.1.0/24
leftnexthop=%defaultroute
leftprotoport=17/1701
right=A.B.C.D
rightprotoport=17/1701
Не уверен, что это считается ответом.
Наконец-то у меня появилась возможность попробовать strongSwan, и он сделал то, что мне нужно, за считанные минуты.
В основном я использую конфигурацию сайт-сайт, как здесь: http://www.strongswan.org/uml/testresults/ikev2/net2net-psk/
Итак, на сервере у нас есть:
# /etc/ipsec.conf - strongSwan IPsec configuration file
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
authby=secret
keyexchange=ikev2
mobike=no
conn net-net
left=192.168.0.1
leftsubnet=10.1.0.0/16
leftid=@moon.strongswan.org
leftfirewall=yes
right=192.168.0.2
rightsubnet=10.2.0.0/16
rightid=@sun.strongswan.org
auto=add
На клиенте:
# /etc/ipsec.conf - strongSwan IPsec configuration file
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
authby=secret
keyexchange=ikev2
mobike=no
conn net-net
left=192.168.0.2
leftsubnet=10.2.0.0/16
leftid=@sun.strongswan.org
leftfirewall=yes
right=192.168.0.1
rightsubnet=10.1.0.0/16
rightid=@moon.strongswan.org
auto=add
Затем на сервере:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ipsec start
На клиенте
# ipsec start
# ipsec up net-net
Я до сих пор не разработал свою полную настройку Roadwarrior, это просто использование предварительного ключа без аутентификации, но я уверен, что это можно сделать с strongSwan. Скажем так, это намного разумнее, чем OpenSwan.