LINUX.ORG.RU
решено ФорумAdmin

IPsec; LAN: исчезает доступ в интернет из LAN при поднятии туннеля.

 , ,


0

1

Прошу помощи. Настроил на Debian Jessie шлюз для доступа в интернет из локальной сети, попутно по заданию подняв ipsec-туннель на strongswan. Интерфейс eth0 смотрит наружу, на котором с провайдером поднят PPPoE-туннель(ppp0), eth1 смотрит в LAN. Проблема заключается в том, что когда выполняю команду

# ipsec start
доступ в интернет из сети LAN падает. При этом моментально поднимается когда выполняю
# ipsec stop
таблицы iptables:
*nat
:PREROUTING ACCEPT [24:3145]
:INPUT ACCEPT [5:1722]
:OUTPUT ACCEPT [7:455]
:POSTROUTING ACCEPT [7:455]
-A POSTROUTING -d 192.168.0.0/16 -j RETURN
-A POSTROUTING -s 192.168.200.0/24 -j MASQUERADE
COMMIT
# Completed on Thu Feb 11 21:58:47 2016
# Generated by iptables-save v1.4.21 on Thu Feb 11 21:58:47 2016
*filter
:INPUT ACCEPT [1:56]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1859:329189]
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4500 -j ACCEPT
-A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ppp0 -o eth1 -j ACCEPT
COMMIT
# Completed on Thu Feb 11 21:58:47 2016
# Generated by iptables-save v1.4.21 on Thu Feb 11 21:58:47 2016
*mangle
:PREROUTING ACCEPT [1624946:1570565421]
:INPUT ACCEPT [34934:19422054]
:FORWARD ACCEPT [1588020:1551002333]
:OUTPUT ACCEPT [32857:3994826]
:POSTROUTING ACCEPT [1620373:1554896358]
COMMIT
на всякий случай ipsec.conf
config setup
#       strictcrlpolicy=yes
#       uniqueids = no
        charondebug="ike 2, chd 2, knl 2, cfg 2,dmn 2, mgr 2, job 2, net 2"

conn %default
        ikelifetime=1440m
        keylife=60m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev1
        authby=secret

conn ciscoasa
        left=IP_МОЙ_ВНЕШНИЙ
        leftsubnet=192.168.200.0/24
        leftid=IP_МОЙ_ВНЕШНИЙ
        right=IP_CISCOASA
        rightsubnet=192.168.0.0/16
        rightid=IP_CISCOASA
        auto=start
        ike=3des-md5-modp1024
        esp=3des-md5
Поначалу грешил на дефолтный шлюз, но вывод
# ip r
всегда показывает одно и то же, что при поднятии тоннеля, что при его отключении:
# ip r
default dev ppp0  scope link 
IP_ШЛЮЗ_ПРОВАЙДЕРА dev ppp0  proto kernel  scope link  src IP_МОЙ_ВНЕШНИЙ
169.254.0.0/16 dev eth1  scope link  metric 1000 
192.168.200.0/24 dev eth1  proto kernel  scope link  src 192.168.200.1
В какую сторону нужно копать?

P.S. Тоннель поднимается для организации ip-телефонии со сквозной нумерацией между офисами в разных городах, сервер Asterisk ставится с моей стороны. При поднятии тоннеля регистрация пиров с ip-фонов на сервере проходит без проблем, как и поднятие внешнего транка с дальнейшим осуществлением звонков по всем направлениям.

P.P.S.

net.ipv4.ip_forward = 1
в /etc/sysctl.conf добавлено.



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

Правила iptables приведены для поднятого ipsec? Что при поднятом ipsec показывает ″ip xfrm pol show″?

mky ★★★★★
()

Сейчас хочу спать и могу тупить, но подозреваю, что все дело в пересекающихся сетях в *subnet. Глянь выхлоп ip xfrm policy, там должно быть видно что-то, понимаемое как «трафик между 192.168.200.0/24 и 192.168.0.0/16 должен быть завернут в ESP».
Соответственно, когда у тебя какой-нибудь 192.168.200.2 (или кто там у тебя LAN) прется к 192.168.200.1 (или где там шлюз) за инетом, он отбрасывается, ибо голый.

thesis ★★★★★
()

ЕМНИП при поднятии net2net туннеля нужно указывать right/leftsourceip (по крайней мере на OpenSwan это так)

Как бы я делал:

conn ciscoasa
        left=IP_МОЙ_ВНЕШНИЙ
        leftsubnet=192.168.200.0/24
        leftid=IP_МОЙ_ВНЕШНИЙ
        leftsourceip=IP_ШЛЮЗА_ВНУТРИ_192.168.200/24
        right=IP_CISCOASA
        rightsubnet=192.168.0.0/16
        rightid=IP_CISCOASA
        rightsourceip=IP_CISCO_ВНУТРИ_192.168/16
        auto=start
        ike=3des-md5-modp1024
        esp=3des-md5

По iptables:

iptables -A INPUT -s IP_CISCOASA -i ppp0 -p esp ACCEPT

Натить можно одним правилом, если у вас только одна подсеть за туннелем:

iptables -A POSTROUTING -s 192.168.200.0/24 ! -d 192.168.0.0/24 -j MASQUERADE

Про пересекающиеся subnet уже сказали.

trancefer ★★
()

Всем ответившим огромнейшее благодарю за ответы. Насчёт пересекающихся сетей были мысли, но не находил более-менее внятной информации по этому вопросу. Попробую применить Ваши ответы и отпишусь о результатах.

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

ЕМНИП при поднятии net2net туннеля нужно указывать right/leftsourceip (по крайней мере на OpenSwan это так)

Не искал именно openswan. В подключённом репозитории, зеркале Яндекса для 8-го Дебиана, его и в помине нет среди списков пакетов. Поэтому использовал strongswan. Конфигом несильно отличается, разница в том, что многие параметры объявлены устаревшими и при запуске strongswan объявляются некритическими ошибками. Нужно посмотреть, как strongswan отреагирует на параметр left/rightsourceip. По крайней мере, на left/rightnexthop ругается точно.

Натить можно одним правилом, если у вас только одна подсеть за туннелем

Ну да... А иначе на маску 16 нужно 254 правила :)

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

Правила iptables приведены для поднятого ipsec?

Да

Что при поднятом ipsec показывает ″ip xfrm pol show″?

Чуть позже скажу, жена просит с дочкой посидеть :)

AquaBlast
() автор топика
18 марта 2016 г.

Тема закрыта.

Всё дело было в пересекающихся сетях:

В iptables нужно было каждую подсеть /24 прописывать отдельно, чтобы проходил трафик через 192.168.200.1/24

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