LINUX.ORG.RU
ФорумAdmin

L2TP/IPsec passthrough Linux router

 , , , ,


0

1

Добрый вечер комрады, очередная загадка:

Имеется Linux роутер на Debian 9 stretch с белым внешним IP: 99.99.99.99

Linux 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28)

Сетевые интерфейсы:

auto lo
iface lo inet loopback

#Inet
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

#Lan
auto eth2
allow-hotplug eth2
iface eth2 inet manual

#WiFi
auto wlan0
iface wlan0 inet manual
auto wlan1
iface wlan1 inet manual

#Bridge
auto br0
iface br0 inet static
 address 192.168.99.87
 netmask 255.255.255.0
 bridge_ports eth2 wlan0 wlan1

ifconfig:

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.99.87  netmask 255.255.255.0  broadcast 192.168.99.255
        ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 119148706  bytes 160144289110 (149.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16776710  bytes 3320910035 (3.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 99.99.99.99  netmask 255.255.224.0  broadcast 99.99.99.255
        ether 00:00:00:00:00:01  txqueuelen 1000  (Ethernet)
        RX packets 2401599  bytes 2906530144 (2.7 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1051367  bytes 318493445 (303.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:00:00:00:00:02  txqueuelen 1000  (Ethernet)
        RX packets 129438767  bytes 163009222512 (151.8 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 18073953  bytes 3468675235 (3.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7700000-f7720000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 1830008  bytes 2464478015 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1830008  bytes 2464478015 (2.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:00:00:00:00:03  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:00:00:00:00:04  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

iptables-save

# Generated by iptables-save v1.6.0 on Tue Dec 12 20:43:50 2017
*raw
:PREROUTING ACCEPT [102195:130945162]
:OUTPUT ACCEPT [30019:1680779]
COMMIT
# Completed on Tue Dec 12 20:43:50 2017
# Generated by iptables-save v1.6.0 on Tue Dec 12 20:43:50 2017
*mangle
:PREROUTING ACCEPT [102195:130945162]
:INPUT ACCEPT [101924:130887539]
:FORWARD ACCEPT [271:57623]
:OUTPUT ACCEPT [30019:1680779]
:POSTROUTING ACCEPT [30291:1738434]
COMMIT
# Completed on Tue Dec 12 20:43:50 2017
# Generated by iptables-save v1.6.0 on Tue Dec 12 20:43:50 2017
*nat
:PREROUTING ACCEPT [69:5533]
:INPUT ACCEPT [16:748]
:OUTPUT ACCEPT [13:1140]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -p esp -j ACCEPT
-A POSTROUTING -j MASQUERADE
COMMIT
# Completed on Tue Dec 12 20:43:50 2017
# Generated by iptables-save v1.6.0 on Tue Dec 12 20:43:50 2017
*filter
:INPUT ACCEPT [41:4996]
:FORWARD ACCEPT [53:4785]
:OUTPUT ACCEPT [30019:1681671]
-A INPUT -p esp -j ACCEPT
-A INPUT -p udp -m udp -m multiport --sports 500,4500 -j ACCEPT
-A INPUT -p udp -m udp -m multiport --dports 500,4500 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Dec 12 20:43:50 2017

sysctl -p

vm.mmap_min_addr = 0
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_helper = 1

В /etc/modules добавлена строка: nf_nat_pptp

За этим роутером находятся компы с Windows 10 через свитч подключенные, их IP: 192.168.99.100 192.168.99.200

Проблема: Не получается подключиться с этих компов к другой офисной сети по стандартному виндовому VPN подключению c типом L2TP/IPsec и общим ключем 123123123123

После непродолжительного ожидания подключение завершается ошибкой:

Не удалось установить связь по сети между компьютером и VPN-сервером, так как удаленный сервер не отвечает. Возможная причина: одно из сетевых устройств (таких как брандмауэры, NAT, маршрутизаторы и т.п.) между компьютером и удаленным сервером не настроено для разрешения VPN-подключений.

Удаленный сервер из себя представляет виндовый сервак 2012 с белым внешним айпишником не за NAT: 88.88.88.88 Удаленная локальная сеть: 192.168.1.0/24 Причем PPTP VPN подключается без проблем, а L2TP не работает ни с винд, ни с айфонов.

tcpdump -n port 500 or port 4500

listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:17:35.081403 IP 99.99.99.99.500 > 88.88.88.88.500: isakmp: phase 1 I ident
23:17:35.087089 IP 88.88.88.88.500 > 99.99.99.99.500: isakmp: phase 1 R ident
23:17:35.088154 IP 99.99.99.99.500 > 88.88.88.88.500: isakmp: phase 1 I ident
23:17:35.108221 IP 88.88.88.88.500 > 99.99.99.99.500: isakmp: phase 1 R ident
23:17:35.109243 IP 99.99.99.99.4500 > 88.88.88.88.4500: NONESP-encap: isakmp: phase 1 I ident[E]
23:17:35.113114 IP 88.88.88.88.4500 > 99.99.99.99.4500: NONESP-encap: isakmp: phase 1 R ident[E]
23:17:35.113968 IP 99.99.99.99.4500 > 88.88.88.88.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
23:17:35.121960 IP 88.88.88.88.4500 > 99.99.99.99.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[EC]
23:17:35.122557 IP 99.99.99.99.4500 > 88.88.88.88.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[EC]
23:17:35.127471 IP 88.88.88.88.4500 > 99.99.99.99.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[EC]
23:17:54.114084 IP 99.99.99.99.4500 > 88.88.88.88.4500: isakmp-nat-keep-alive
23:18:10.138536 IP 99.99.99.99.4500 > 88.88.88.88.4500: NONESP-encap: isakmp: phase 2/others I inf[E]
23:18:10.140443 IP 99.99.99.99.4500 > 88.88.88.88.4500: NONESP-encap: isakmp: phase 2/others I inf[E]
23:18:10.143634 IP 88.88.88.88.4500 > 99.99.99.99.4500: NONESP-encap: isakmp: phase 2/others R inf[E]
23:18:10.146549 IP 88.88.88.88.4500 > 99.99.99.99.4500: NONESP-encap: isakmp: phase 2/others R inf[E]

Сравнив свой tcpdump с чужим удачным подключением: http://debuntu.ru/note/nastroyka-probrosa-l2tp вижу что не происходит UDP-encap. Прописывание в реестре винд AssumeUDPEncapsulationContextOnSendRule=2 проблему не решает

Если заменить линукс роутер железячкой от интернет провайдера huawei hg8245h в режиме маршрутизации, то L2TP прекрасно подключается с компов и айфонов. Если вернуть huawei в Bridge и подключить линк к ноуту, он получит белый внешний айпи и VPN L2TP подключается норм. Если вернуть huawei в Bridge и подключить линк к Linux Router то VPN L2TP не подключается на компах за Linux роутером.

Т.е. дело явно в Linux роутере. Помогите пожалуйста с диагностикой и настройкой как заставить Linux Router пропускать L2TP/IPsec passthrough ?



Последнее исправление: Lollipop (всего исправлений: 2)

Может есть смысл попробовать настроить чистый ipsec без l2tp (непонятно зачем он в этой ситуации) между роутером и удаленным сервером, чтобы для клиентов взаимодействие с удаленной сетью было прозрачным?

Что происходит если зафлушить правила iptables (или просто его грохнуть)?

Что в логах ipsec с обоих сторон?

vren
()

*filter :INPUT DROP [1197:634369] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m state --state UNTRACKED -j ACCEPT -A INPUT -p 50 -j ACCEPT -A INPUT -p 51 -j ACCEPT -A INPUT -p udp --dport 1701 -j ACCEPT -A INPUT -p udp --dport 1702 -j ACCEPT -A INPUT -p udp --dport 500 -j ACCEPT -A INPUT -p udp --dport 4500 -j ACCEPT

# lsmod | grep l2tp l2tp_ppp 22567 0 l2tp_netlink 17851 1 l2tp_ppp l2tp_core 34569 2 l2tp_ppp,l2tp_netlink pppox 13342 3 pptp,l2tp_ppp,pppoe ppp_generic 33041 6 pptp,l2tp_ppp,pppoe,pppox,ppp_mppe,ppp_async

anonymous
()
Ответ на: комментарий от voltmod

Включи ipsec nat traversal

По условию задачи с одной стороны Windows Server 2012, с другой стороны Windows 10 а между ними Linux Router как вы себе представляете включение NAT-T, можно поподробней?

Lollipop
() автор топика
Ответ на: комментарий от vren

Может есть смысл попробовать настроить чистый ipsec без l2tp

- Может есть смысл попробовать настроить чистый ipsec без l2tp Смысла настроить IPsec тунель нет.

- Что в логах ipsec с обоих сторон? С каких сторон? Вы же внимательно читали условие? С одной стороны Windows Server 2012 c RRAS L2TP/IPsec сервером а с другой Windows 10 и впн подключение, на сервере в логах всё хорошо и на клиентах тоже, спасибо что поинтересовались, и в целом тоже неплохо, процессор шумит и интернет качается.

Что происходит если зафлушить правила iptables (или просто его грохнуть)? Спасибо за идею, сделал в консоли iptables -F и сразу пропал удаленный доступ к севреру по SSH. Но Linux Router продолжил работать как ip v4 router, PPTP VPN соединение устанавливается, L2TP нет.

Lollipop
() автор топика
Ответ на: комментарий от anonymous

*filter и lsmod | grep l2tp

*filter 
:INPUT DROP [1197:634369] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -m state --state UNTRACKED -j ACCEPT 
-A INPUT -p 50 -j ACCEPT -A INPUT -p 51 -j ACCEPT 
-A INPUT -p udp --dport 1701 -j ACCEPT 
-A INPUT -p udp --dport 1702 -j ACCEPT 
-A INPUT -p udp --dport 500 -j ACCEPT 
-A INPUT -p udp --dport 4500 -j ACCEPT

ничего не даёт, всё по прежнему, да и странно ведь в моем выводе и так открыт полный доступ к серверу INPUT ACCEPT

# lsmod | grep l2tp пусто ничего не выводит, но и зачем бы на Linux роутере иметь все эти модули если он просто роутер а не L2TP/IPsec сервер?

Или для того, что бы роутеру пропускать через себя L2TP/IPsec трафик их нужно загружать?

Ведь тема называется L2TP/IPsec passthrough Linux router где passthrough это означает пропускать через себя L2TP/IPsec трафик, а не являться сервером L2TP/IPsec

Lollipop
() автор топика
Ответ на: комментарий от voltmod

На ws2012, я без понятия как он там включается, загугли.

А ничего что если в место Linux роутера поставить железячный роутер в котором тоже линукс, то L2TP/IPsec нормально подключается с Windows 10 к ws2012 ? Из этого следует что дело не в Сервере и не в клиентах, а в Linux роутере.

Lollipop
() автор топика

Смысла настроить IPsec тунель нет.

Лучше завернуть все в l2tp с mtu 1200 и поднять 10 туннелей вместо одного?

Если не нужно роутить весь трафик через vpn, а только получить доступ к удаленной сети, то голый ipsec как раз то, что надо (между шлюзом и удаленным сервером).

Спасибо за идею, сделал в консоли iptables -F и сразу пропал удаленный доступ к севреру по SSH

Дай угадаю: после проставки INPUT policy в DROP?

Просто грохни сервис iptables.

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

то голый ipsec как раз то, что надо

VREN - Задача стоит покрасить стену в красный цвет, а не просто покрасить. Вы же утверждаете, что зеленый цвет лучше. Это бессмысленно, остановитесь пожалуйста.

Lollipop
() автор топика
Ответ на: то голый ipsec как раз то, что надо от Lollipop

Оптимальность решения это не вопрос вкуса, а нечто объективное, и мы с Вами находимся не в отношениях заказчик-исполнитель, рекомендую Вам пересмотреть свой тон или проследовать например на upwork.com.

Всех благ, желаю вам решить свою проблему.

vren
()
Ответ на: комментарий от anc

И вот это смущает 192.168.99.87 - это у вас такой адрес шлюза для локальной сети?

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.