LINUX.ORG.RU
ФорумAdmin

Скрипт L2TP VPN - работает на DigitalOcean, но не работает на Google Cloud

 ,


0

2

Приветствую.

Вынужден обратиться за помощью, потратил целый день и решить не удалось.

Взял скрипт с сайта https://www.ylsoftware.com/news/706 Для удобства привел к неинтерактивному вид, чтобы не набирать вручную:

#!/bin/bash

# Внешний интерфейс сервера (узнать командой ip route)
IF_EXT="eth0"

apt -y update

echo iptables-persistent iptables-persistent/autosave_v4 boolean false | sudo debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean false | sudo debconf-set-selections

apt -y install strongswan xl2tpd iptables-persistent

echo '%any %any : PSK "Sup3rP4ss"' > /etc/ipsec.secrets

echo 'config setup
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        nat_traversal=yes
        protostack=netkey

conn l2tpvpn
        type=transport
        authby=secret
        pfs=no
        rekey=no
        keyingtries=1
        left=%any
        leftprotoport=udp/l2tp
        leftid=@l2tpvpnserver
        right=%any
        rightprotoport=udp/%any
        auto=add' > /etc/ipsec.conf
		
service strongswan restart

echo '[global]
port = 1701
access control = no
ipsec saref = yes
force userspace = yes

; Файл с логинами и паролями
auth file = /etc/ppp/chap-secrets

[lns default]
; Диапазон адресов, динамически выдаваемых клиентам
; Мы ограничимся подсетью 172.28.253.64/26
; Первую её часть оставим под статически привязанные к логинам адреса
; А вторая - динамический пул
ip range = 172.28.253.96-172.28.253.126

; IP-адрес на стороне сервера
local ip = 172.28.253.65

; Это имя используется в качестве ipparam при поиске логинов и паролей в auth file
name = l2tpserver

; Файл с дополнительными опциями для ppp
pppoptfile = /etc/ppp/options.xl2tpd

flow bit = yes
exclusive = no
hidden bit = no
length bit = yes
require authentication = yes
require chap = yes
refuse pap = yes' > /etc/xl2tpd/xl2tpd.conf

echo 'noccp
auth
crtscts
mtu 1410
mru 1410
nodefaultroute
lock
noproxyarp
silent
modem
asyncmap 0
hide-password
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4' > /etc/ppp/options.xl2tpd

service xl2tpd restart

# Внутренние интерфейсы (обслуживающие ВПН-клиентов)
IF_INT="ppp+"

# Сеть, адреса из которой будут получать ВПН-клиенты
NET_INT="172.28.253.64/26"

# Сбрасываем все правила
iptables -F
iptables -F -t nat

# Устанавливаем политики по умолчанию
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Разрешаем весь трафик на петлевом интерфейсе
iptables -A INPUT -i lo -j ACCEPT

# Разрешаем всё для ВПН-клиентов
iptables -A INPUT -i ${IF_INT} -s ${NET_INT} -j ACCEPT


# Разрешаем входящие соединения к L2TP
# Но только с шифрованием!
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT

# Разрешаем IPSec
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p ah -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT

# Разрешаем доступ к серверу по SSH
iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT


# Разрешаем входящие ответы на исходящие соединения
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT для локальной сети (ВПН-клиентов)
iptables -t nat -A POSTROUTING -s ${NET_INT} -j MASQUERADE -o ${IF_EXT}
iptables -A FORWARD -i ${IF_INT} -o ${IF_EXT} -s ${NET_INT} -j ACCEPT
iptables -A FORWARD -i ${IF_EXT} -o ${IF_INT} -d ${NET_INT} -m state --state RELATED,ESTABLISHED -j ACCEPT

netfilter-persistent save

echo 'net.ipv4.ip_forward=1' > /etc/sysctl.conf

sysctl -p /etc/sysctl.conf

echo '"user1"    l2tpserver    "mypassword12"    *' > /etc/ppp/chap-secrets

Создаю Ubuntu 18.0.4, сохраняю этот код в файл vpn.sh, запускаю sh vpn.sh и на DigitalOcean получаю готовый работающий VPN-сервер.

Пробую то же самое сделать на Google Cloud и получаю фигу. При этом вношу правильный IF_EXT (первая переменная в скрипте), узнаю с помощью команды ip route (у гугла это обычно ens4).

В фаяволе облачном все порты открыты.

Какие могут быть причины, почему у гугла на той же самой версии OC (Ubuntu 18.0.4) - не работает. При запуске скрипта никаких ошибок не выдает.

Когда запускаю скрипт создания Proxy Squid - то все работает на Google Cloud (то есть оно порты перебрасует).

И там и там запускаю под root, в гугле предварительно ввожу sudo su.

Куда копать, какие варианты?

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

service strongswan status

root@instance-1:/home/myuser1# service strongswan status
● strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
   Loaded: loaded (/lib/systemd/system/strongswan.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-09-18 11:55:52 UTC; 2min 48s ago
 Main PID: 3084 (starter)
    Tasks: 18 (limit: 1997)
   CGroup: /system.slice/strongswan.service
           ├─3084 /usr/lib/ipsec/starter --daemon charon --nofork
           └─3122 /usr/lib/ipsec/charon
Sep 18 11:57:07 instance-1 charon[3122]: 10[NET] received packet: from 193.34.141.49[4500] to 10.50.0.2[4500] (76 b
Sep 18 11:57:07 instance-1 charon[3122]: 10[ENC] parsed INFORMATIONAL_V1 request 2152539006 [ HASH D ]
Sep 18 11:57:07 instance-1 charon[3122]: 10[IKE] received DELETE for ESP CHILD_SA with SPI fdfcd470
Sep 18 11:57:07 instance-1 charon[3122]: 10[IKE] closing CHILD_SA l2tpvpn{3} with SPIs c1531518_i (0 bytes) fdfcd47
Sep 18 11:57:07 instance-1 charon[3122]: 10[IKE] closing CHILD_SA l2tpvpn{3} with SPIs c1531518_i (0 bytes) fdfcd47
Sep 18 11:57:07 instance-1 charon[3122]: 09[NET] received packet: from 193.34.141.49[4500] to 10.50.0.2[4500] (92 b
Sep 18 11:57:07 instance-1 charon[3122]: 09[ENC] parsed INFORMATIONAL_V1 request 1238273170 [ HASH D ]
Sep 18 11:57:07 instance-1 charon[3122]: 09[IKE] received DELETE for IKE_SA l2tpvpn[1]
Sep 18 11:57:07 instance-1 charon[3122]: 09[IKE] deleting IKE_SA l2tpvpn[1] between 10.50.0.2[l2tpvpnserver]...193.
Sep 18 11:57:07 instance-1 charon[3122]: 09[IKE] deleting IKE_SA l2tpvpn[1] between 10.50.0.2[l2tpvpnserver]...193.

service xl2tpd status

root@instance-1:/home/myuser1# service xl2tpd status
● xl2tpd.service - LSB: layer 2 tunelling protocol daemon
   Loaded: loaded (/etc/init.d/xl2tpd; generated)
   Active: active (running) since Tue 2018-09-18 11:55:52 UTC; 6min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3098 ExecStop=/etc/init.d/xl2tpd stop (code=exited, status=0/SUCCESS)
  Process: 3115 ExecStart=/etc/init.d/xl2tpd start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 1997)
   CGroup: /system.slice/xl2tpd.service
           └─3124 /usr/sbin/xl2tpd
Sep 18 11:55:52 instance-1 xl2tpd[3123]: setsockopt recvref[30]: Protocol not available
Sep 18 11:55:52 instance-1 xl2tpd[3123]: Not looking for kernel support.
Sep 18 11:55:52 instance-1 xl2tpd[3115]: Starting xl2tpd: xl2tpd.
Sep 18 11:55:52 instance-1 systemd[1]: Started LSB: layer 2 tunelling protocol daemon.
Sep 18 11:55:52 instance-1 xl2tpd[3124]: xl2tpd version xl2tpd-1.3.10 started on instance-1 PID:3124
Sep 18 11:55:52 instance-1 xl2tpd[3124]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
Sep 18 11:55:52 instance-1 xl2tpd[3124]: Forked by Scott Balmos and David Stipp, (C) 2001
Sep 18 11:55:52 instance-1 xl2tpd[3124]: Inherited by Jeff McAdams, (C) 2002
Sep 18 11:55:52 instance-1 xl2tpd[3124]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016
Sep 18 11:55:52 instance-1 xl2tpd[3124]: Listening on IP address 0.0.0.0, port 1701

journal -xe

Такой команды не знает.

journal -xe
Command 'journal' not found, did you mean:
  command 'xournal' from deb xournal
Try: apt install <deb name>
codecity ()
Ответ на: комментарий от Jopich1

1. ufw отключен, еще раз ввел ufw disable и ничего не изменилось.

2. Внешний интерфейс ens4.

Когда ввожу

tcpdump -i ens4 -s 1500 port not 22

то при попытке подключить наблюдая некую активность, типа:

12:20:20.191527 IP XXX.XXX.XXX.XXX.isakmp > instance-1.us-central1-c.c.model-signifier-216607.internal.isakmp: isakmp: phase 1 I ident
12:20:20.192262 IP instance-1.us-central1-c.c.model-signifier-216607.internal.isakmp > XXX.XXX.XXX.XXX.isakmp: isakmp: phase 1 R ident
12:20:20.366402 IP XXX.XXX.XXX.XXX.isakmp > instance-1.us-central1-c.c.model-signifier-216607.internal.isakmp: isakmp: phase 1 I ident
12:20:20.371802 IP instance-1.us-central1-c.c.model-signifier-216607.internal.isakmp > XXX.XXX.XXX.XXX.isakmp: isakmp: phase 1 R ident
12:20:20.581120 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 1 I ident[E]
12:20:20.581891 IP instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t > XXX.XXX.XXX.XXX.ipsec-nat-t: NONESP-encap: isakmp: phase 1 R ident[E]
12:20:20.943972 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
12:20:20.944822 IP instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t > XXX.XXX.XXX.XXX.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
12:20:21.122042 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
12:20:21.224704 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
12:20:21.226515 IP instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t > XXX.XXX.XXX.XXX.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
12:20:21.448753 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
12:20:21.448799 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I inf[E]
12:20:24.107060 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
12:20:24.108861 IP instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t > XXX.XXX.XXX.XXX.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
12:20:24.272637 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
12:20:24.272686 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I inf[E]
12:20:25.020272 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I inf[E]
12:20:25.020319 IP XXX.XXX.XXX.XXX.ipsec-nat-t > instance-1.us-central1-c.c.model-signifier-216607.internal.ipsec-nat-t: NONESP-encap: isakmp: phase 2/others I inf[E]

где XXX.XXX.XXX.XXX - IP адрес в сети моего провайдера, но не мой IP.

При этом на клиенте никаких признаков жизни - просто типа подключается, крутит колесико без остановки. С теми же настройками в DigitalOcean все работает.

codecity ()
Ответ на: комментарий от Jopich1

Google Cloud это просто kvm с внешним ip

Нет, они сами перебрасывают порты на внешний IP.

Порты 4500,500 открыты ?

Для тестов - открыл все порты (устанавливал для проверки proxy Squid и через него подключался).

codecity ()