Назад | Перейти на главную страницу

Используйте Openswan / IPSec на сервере Ubuntu для подключения к существующей Openswan VPN - NAT сломан

У меня есть существующий 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.