Ipsec Linux to Linux (Решено)

Ipsec тунель между Linux - Linux (FreeSwan)
Доброго времен суток всем!

Пытаюсь поднять тунель между двумя подсетями, вроде тунель создаётся, ipsec не ругается, но после старта хосты из разных подсетей не пингуются.

ipsec.conf:
version 2.0
config setup
nat_traversal=yes
nhelpers=0
forwardcontrol=yes
klipsdebug=none
plutodebug=none
conn testnet-vpn
left=AA.AA.AA.AA
leftsubnet=192.168.50.0/24
leftrsasigkey=R1E1GC4np...
#leftnexthop=BB.BB.BB.BB
right=BB.BB.BB.BB
rightsubnet=192.168.17.0/24
rightrsasigkey=NlnTpd...
#rightnexthop=AA.AA.AA.AA
auto=start
# sample VPN connections, see /etc/ipsec.d/examples/

#Disable Opportunistic Encryption
include /etc/ipsec/ipsec.d/examples/no_oe.conf

В ipsec.secret соответственно всё присутствует...

temp_fw / # ipsec verify

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.4.15/K2.6.29-gentoo-r5 (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking for RSA private key (/etc/ipsec/ipsec.secrets) [OK]
Checking that pluto is running [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking NAT and MASQUERADEing
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]

temp_fw / # ipsec auto status

ipsec auto: warning: obsolete command syntax used
000 interface lo/lo ::1
000 interface lo/lo 127.0.0.1
000 interface lo/lo 127.0.0.1
000 interface eth0/eth0 192.168.50.42
000 interface eth0/eth0 192.168.50.42
000 interface eth1/eth1 AA.AA.AA.AA
000 interface eth1/eth1 AA.AA.AA.AA
000 %myid = (none)
000 debug none
....
....
000 "testnet-vpn": 192.168.50.0/24===AA.AA.AA.AA...BB.BB.BB.BB===192.168.17.0/24; erouted; eroute owner: #30
000 "testnet-vpn": srcip=unset; dstip=unset; srcup=ipsec _updown; dstup=ipsec _updown;
000 "testnet-vpn": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "testnet-vpn": policy: RSASIG+ENCRYPT+TUNNEL+PFS+UP; prio: 24,24; interface: eth1; encap: esp;
000 "testnet-vpn": newest ISAKMP SA: #31; newest IPsec SA: #30;
000 "testnet-vpn": IKE algorithm newest: 3DES_CBC_192-MD5-MODP1536
000
000 #31: "testnet-vpn":500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_REPLACE in 1883s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0)
000 #30: "testnet-vpn":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 26920s; newest IPSEC; eroute owner
000 #30: "testnet-vpn"

000

temp_fw / # iptables-save
-A INPUT -p udp -m udp --dport 500 -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 esp -j ACCEPT
-A OUTPUT -p ah -j ACCEPT

При текущей таблице iptables, сети видны если подключиться по OpenVPN.
Есть подозрение что когда пакеты уходят, то они не ходят через тонель, если пустить трассеры, то видно что после роутера пакет уходит на шлюз провайдера, и там соответственно умирает. Вот таблица маршрутизации после поднятия Ipsec:
temp_fw / # route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
AA.AA.AA.200 * 255.255.255.252 U 0 0 0 eth1
192.168.50.0 * 255.255.255.0 U 0 0 0 eth0
192.168.17.0 * 255.255.255.0 U 0 0 0 eth1
loopback * 255.0.0.0 U 0 0 0 lo
default AA.AA.AA.201 0.0.0.0 UG 0 0 0 eth1

может я чего-то не доделал, или не так сделал? где ишибка в конфиге, или iptables?

temp_fw / # less /var/lib/syslog | grep ipsec
Jul 9 10:38:49 temp_fw ipsec_setup: Starting Openswan IPsec 2.4.15...
Jul 9 10:38:49 temp_fw ipsec_setup: NETKEY on eth1 AA.AA.AA.202/255.255.255.252 broadcast AA.AA.AA.203
Jul 9 10:38:49 temp_fw ipsec_setup: ...Openswan IPsec started
Jul 9 10:38:49 temp_fw ipsec__plutorun: 104 "testnet-vpn" #1: STATE_MAIN_I1: initiate

Таблица маршрутизации

Таблица маршрутизации неправильная. У тебя все пакеты шлются на внешний интерфейс удаленного шлюза.
Нужна команда что-то вроде
route add 192.168.50.0/24 via <шлюз из 50 подсети>
И обратная команда на удаленном узле.

Не грусти, товарищ! Всё хорошо, beautiful good!

winterheart

winterheart написал(а):
Таблица маршрутизации неправильная. У тебя все пакеты шлются на внешний интерфейс удаленного шлюза.
Нужна команда что-то вроде
route add 192.168.50.0/24 via <шлюз из 50 подсети>
И обратная команда на удаленном узле.

Несовсем понял как роуты прописывать. Т.е. на сервере где родная сеть 17.0, я должен прописать в роутах что сеть 50.0 доступна через адресс АА.АА.АА.АА(сервер за которым находится сеть 50.0), или шлюз провайдера указать(Хотя сомневаюсь что тут шлюс прова чем-то может помочь)?
И сразу же другой вопрос, если я явно задам роуты, то как я узнаю что пакеты ходят через тунель, а не просто напрямую по маршруту.
В случае с опенвпн всё ясно, там при поднятии тунеля добавляется маршрут вида 192.168.50.0/24 via 10.17.0.2(адресс локального интерфейса тунеля tun0), и соответственно на другом сервере аналогично. А тут с ipsec непонятно как-то.

Если ты находишься в сети 17,

Если ты находишься в сети 17, то маршрут должен быть таким
route add 192.168.50.0/24 via 192.168.50.1
Где 192.168.50.1 - внутренний адрес VPN-шлюза той сети. Если этот адрес пингуется и никаких запретных правил в FW нет, то трафик будет маршрутизироваться в туннель.
Такое же правило необходимо на удаленной сети.

Проверить можно либо traceroute, либо сниффером на туннельном интерфейсе.

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

Не грусти, товарищ! Всё хорошо, beautiful good!

winterheart написал(а):Если

winterheart написал(а):
Если ты находишься в сети 17, то маршрут должен быть таким
route add 192.168.50.0/24 via 192.168.50.1
Где 192.168.50.1 - внутренний адрес VPN-шлюза той сети. Если этот адрес пингуется и никаких запретных правил в FW нет, то трафик будет маршрутизироваться в туннель.
Такое же правило необходимо на удаленной сети.

Проверить можно либо traceroute, либо сниффером на туннельном интерфейсе.

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

Вроде както управлять маршрутизацией можно, с помощью опций leftnexthope and rightnexthope. вот тока не догнал как ими можно менять маршрутизацию. Когда эти строчки закоментированы, то тунель выглядит вот так:
000 "testnet-vpn": 192.168.50.0/24===AA.AA.AA.AA...BB.BB.BB.BB===192.168.17.0/24; erouted; eroute owner: #30
а в роутах появляется запись вида 192.168.50.0 * 255.255.255.0 U 0 0 0 eth0
Когда указываю leftnexthope=%defaultroute and rightnexthope=%defaultroute, то тунель выглядит так:
"testnet-vpn": 192.168.50.0/24===AA.AA.AA.AA---шлюз для АА...шлюз для АА---BB.BB.BB.BB===192.168.17.0/24; erouted; eroute owner: #2
и на другой стороне то же самое, только вместо "шлюз для АА" - "шлюз для ВВ"
И в роутах добавляется 192.168.17.0 "шлюз для АА" 255.255.255.0 UG 0 0 0 eth1, это для сети 50.0 и наоборот для 17.0
Когда в качестве leftnexthope and rightnexthope указываю 192.168.17.1 и 192.168.50.1 соответственно, то тунель выглядит так:
"testnet-vpn": 192.168.50.0/24===АА.АА.АА.АА---192.168.50.1...192.168.17.1---ВВ.ВВ.ВВ.ВВ===192.168.17.0/24; prospective erouted; eroute owner: #0
роуты не добавляются и хосты не пингаются, пробовал менять местами адресса leftnexthope and rightnexthope, тоже самое...
Если разрешить форвардинг в iptables для сети 17.0 в сеть 50.0, то получется любой у кого адресс соурс из сети 17.0, сможет залесть в 50.0, даже без тонеля, форвардинг должен быть на уровне тонеля. Может бредкакой написал, поправьте меня если что не так пишу, и вообще посоветуйте, если у кого уже есть опыт поднятия IPSEC, как его прально настраивать....

Решил попробовать через

Решил попробовать через ipsec-tools, для начала сделал соединение типа хост-хост, всё прекрасно работает, пакеты шифруются, тунели работают. Когда перевёл конфиги на соединение типа сеть-сеть, опять всё стало глухо, пакеты во внутренние сети не ходят через тонель, а просто шлются на шлюз провайдеров и там умирают, в чём тут может быть проблема? Делал по этому мануалу http://www.ipsec-howto.org/x304.html
Подскажите в чём может быть трабла?

Решено

проблема решена путём добавления в iptables правила отсекающего маскарадинг пакетов уходящих в противополжную сеть.
-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.17.0/24 -o eth1 -j MASQUERADE
Таким образом пакеты которые уходят в сеть 17.0 уходят не через шлюз провайдера, а через созданный тунель.

grizzly написал(а): Таким

grizzly написал(а):
Таким образом пакеты которые уходят в сеть 17.0 уходят не через шлюз провайдера, а через созданный тунель.

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

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".