Ipsec часть вторая. Linux-DMZ to Linux (Решено)
Всем доброго времени суток!
Продолжаю разбираться с IPSEC. На этот раз задание у меня настроить тоннель между Linux (за NAT(Dlink DH804HV)) и другим Linux. Реализация на OpenSwan.
Первый линукс находится на виртуальной машине под управлением Hyper-V, перед ним стоит коробочка Dlink DH804HV, с включенным на линукс DMZ. Второй линукс — обычный сервер, который смотрит в инет напрямую.
Linux-dmz: 192.168.1.31, 192.168.5.0/24
Linux-2: 192.168.1.32, 192.168.6.0/24
Конфиг Linux-dmz:
# basic configuration
config setup
nat_traversal=yes
nhelpers=0
forwardcontrol=yes
klipsdebug=none
plutodebug=none
# Add connections here
conn vpn
#left=192.168.1.31 — если без ДМЗ
left=192.168.0.2
leftsubnet=192.168.5.0/24
leftrsasigkey=0sAQO6e....
leftnexthop=%direct
right=192.168.1.32
rightsubnet=192.168.6.0/24
rightrsasigkey=0sAQPB/0v5.....
rightnexthop=%direct
auto=start
# sample VPN connections, see /etc/ipsec.d/examples/
#Disable Opportunistic Encryption
include /etc/ipsec/ipsec.d/examples/no_oe.conf
Конфиг Linux-2:
# basic configuration
config setup
nat_traversal=yes
nhelpers=0
forwardcontrol=yes
klipsdebug=none
plutodebug=none
# Add connections here
conn vpn
left=192.168.1.31
leftsubnet=192.168.5.0/24
leftrsasigkey=0sAQO6e....
leftnexthop=%direct
right=192.168.1.32
rightsubnet=192.168.6.0/24
rightrsasigkey=0sAQPB/0v5.....
rightnexthop=%direct
auto=start
# sample VPN connections, see /etc/ipsec.d/examples/
#Disable Opportunistic Encryption
include /etc/ipsec/ipsec.d/examples/no_oe.conf
В Iptables на обоих серверах присутствует:
-A INPUT -p udp -m udp --dport 500 -m state --state NEW -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -m state --state NEW -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p ah -j ACCEPT
-A OUTPUT -p udp -m udp --dport 500 -m state --state NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 4500 -m state --state NEW -j ACCEPT
-A OUTPUT -p esp -j ACCEPT
-A OUTPUT -p ah -j ACCEPT
Когда оба сервера подключены напрямую, без роутера, то тоннель создаётся без проблем, и всё работает.
Как только первый сервер прячу за DMZ, при этом на Dlink'e выставляю внешним адресом 192.168.1.31, внутренний 192.168.0.1 и соответственно на линуксе внешним становится 192.168.0.2, то тоннель не хочет запускаться, видно в статусе что он пытается обменяться ключами по порту 4500, но не переходит в состояние establish, вроде nat-t правильно определяет что он за натом и запускается, но дальше попытки обмена ключами не доходит.
На Dlink'e есть ещё возможность настройки виртуальных серверов, типа проброс портов, есть там и IPSEC, пробовал включать, но там видно что он пробрасывает 500-й порт, плюс пробовал создавать свой виртуальный сервер с пробросом порта 4500. Прбовал все комбинации включения ДМЗ и виртуальных хостов, результат — тоннель не работает.
Linux-dmz# ipsec auto status
000 "vpn": 192.168.5.0/24===192.168.0.2...192.168.1.32===192.168.6.0/24; prospective erouted; eroute owner: #0
000 "vpn": srcip=unset; dstip=unset; srcup=ipsec _updown; dstup=ipsec _updown;
000 "vpn": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "vpn": policy: RSASIG+ENCRYPT+TUNNEL+PFS+UP; prio: 24,24; interface: eth0; encap: esp;
000 "vpn": newest ISAKMP SA: #0; newest IPsec SA: #0;
000
000 #2040: "vpn":4500 STATE_MAIN_I3 (sent MI3, expecting MR3); EVENT_RETRANSMIT in 7s; lastdpd=-1s(seq in:0 out:0)
000 #2040: pending Phase 2 for "vpn" replacing #0
000 #2041: "vpn":4500 STATE_MAIN_I3 (sent MI3, expecting MR3); EVENT_RETRANSMIT in 39s; lastdpd=-1s(seq in:0 out:0)
000
Linux-2# ipsec auto status
000 "vpn": 192.168.6.0/24===192.168.1.32...192.168.1.31===192.168.5.0/24; erouted HOLD; eroute owner: #0
000 "vpn": srcip=unset; dstip=unset; srcup=ipsec _updown; dstup=ipsec _updown;
000 "vpn": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "vpn": policy: RSASIG+ENCRYPT+TUNNEL+PFS+UP; prio: 24,24; interface: eth1; encap: esp;
000 "vpn": newest ISAKMP SA: #0; newest IPsec SA: #0;
000
000 #2015: "vpn":500 STATE_MAIN_R2 (sent MR2, expecting MI3); EVENT_RETRANSMIT in 32s; lastdpd=-1s(seq in:0 out:0)
000 #13: "vpn":4500 STATE_MAIN_I3 (sent MI3, expecting MR3); none in -1s; lastdpd=-1s(seq in:0 out:0)
000 #13: pending Phase 2 for "vpn" replacing #0
000 #2014: "vpn":500 STATE_MAIN_R2 (sent MR2, expecting MI3); EVENT_RETRANSMIT in 1s; lastdpd=-1s(seq in:0 out:0)
Что не так делаю? Может у кого-то есть опыт такой конфигурации?
Ещё попробую написать на форуме Dlink, может там смогут объяснить как у них работает DMZ and IPSEC virtual-server. Или я что-то в конфигах намудрил?
P.S. Ipsec pass-through на Dlink включен.
- Для комментирования войдите или зарегистрируйтесь
Эх, никто не отвечает. Сам
Эх, никто не отвечает. Сам разобрался.
Добавил в конфигах в соответствующих местах параметры leftid=@someid, rightid=@someid2.
Плюс на D-Link'e оказалось в ДМЗ порт 4500 почему-то не пробрасывается, отключил в итоге ДМЗ и просто пробросил в virtual-servers порт 4500, это оказалось достаточным чтобы IPSEC заработал.