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

strongswan site-to-site routing

 ,


0

1

Доброго здоровья! Прошу вашего совета ибо я не гуру iptables и уже не понимаю что еще делать. Бьюсь 2й день. прочитал много интернета, но чувствую что что-то делаю не то. И так. Есть хост. ОС Centos 6+strongswan с 1 интерфейсом eth0(192.168.1.1). На нем поднят DHCPD(192.168.1.0/29) раздающий IP клиенту. Сам же хост связывается с «базой» по средству site-to-site vpn через обычный USB 3G модем+статический IP ;). Хост вполне нормально имеет доступ через тоннель в локальную сеть. Так же без проблем попадает в нет через USB 3G модем. Тут все оК!

А теперь где я заткнулся. К хосту подключен клиент и по DHCP получил IP 192.168.1.2/255.255.255.248 GW 192.168.1.1 Этот клиент пингует благодаря правилам iptables

iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
внешний ppp0 IP USB 3G модема,есть выход в интернет, ну и естественно пингует шлюз 192.168.1.1. А вот как его завернуть и объяснить чтобы он лез не через ppp0, а через тоннель ipsec0 я не смог. Или как объяснить клиенту, что все запросы начинающиеся на 10.0.0.0/8 направлять через тоннель.

eth0      Link encap:Ethernet  HWaddr 00:1F:E2:43:BE:36  
          inet addr:192.168.1.1  Bcast:192.168.1.7  Mask:255.255.255.248
          inet6 addr: fe80::21f:e2ff:fe43:be36/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:181 errors:0 dropped:0 overruns:0 frame:0
          TX packets:101 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:17548 (17.1 KiB)  TX bytes:9442 (9.2 KiB)

ipsec0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1400  Metric:1
          RX packets:550 errors:0 dropped:0 overruns:0 frame:0
          TX packets:482 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:443683 (433.2 KiB)  TX bytes:43866 (42.8 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:285 errors:0 dropped:0 overruns:0 frame:0
          TX packets:285 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:75845 (74.0 KiB)  TX bytes:75845 (74.0 KiB)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:XXX.XXX.XXX.XXX  P-t-P:XXX.XXX.XXX.26  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:651 errors:0 dropped:0 overruns:0 frame:0
          TX packets:498 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:493053 (481.4 KiB)  TX bytes:75515 (73.7 KiB)

я менял и роутинг

route add -net ....
И iptables крутил. Никак (



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

iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

а трафик через ipsec0 выходит

тогда уж надо

iptables -A FORWARD -i eth0 -o ipsec0 -j ACCEPT
добавить

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

Спасибо за ответ. Под рукой консоли нет,проверю утричком, но допустим сработало и весь трафик пошел в тоннель. Но как отделить тогда трафик интернета от локального 10.0.0.0/8 ?

mplane
() автор топика
Ответ на: комментарий от victorb
# netstat -nr
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
195.128.182.26  0.0.0.0         255.255.255.255 UH        0 0          0 ppp0
192.168.1.0     0.0.0.0         255.255.255.248 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0

Добавил на сервере маршрут

# ip r add 10.0.0.0/8 dev ipsec0 
# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
195.128.182.26  0.0.0.0         255.255.255.255 UH        0 0          0 ppp0
192.168.1.0     0.0.0.0         255.255.255.248 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
10.0.0.0        0.0.0.0         255.0.0.0       U         0 0          0 ipsec0
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0
Если я делаю трасировку скажем на сеть за тоннелем, то
# traceroute 10.10.1.1
1. _gateway (192.168.1.1)
2. * * *
3. * * *
...
Не работает (

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

Не работает (

Нужно добавить маршрут и на той стороне ipsec-туннеля. А то отвечающая машина не знает, куда ответные icmp-пакеты отправлять, и шлет их в шлюз по умолчанию вместо туннеля.

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

Так в том то и дело, что на моей стороне на сервере все ок. Он через тоннель пингует любой хост из 10.0.0.0/8 и в нет идет через USB 3G. Только не хочет натить запросы от своего клиента (еще DHCP поднят) с IP 192.168.1.2

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

Только не хочет натить запросы от своего клиента (еще DHCP поднят) с IP 192.168.1.2

Распишите еще раз подробно, что Вы хотите получить. Зачем Вам натить запросы в локальную сеть? В Интернет понятно, но в сеть 10.0.0.0/8 лучше маршрутизацию настроить. На второй стороне ipsec-туннеля пропишите маршрут в сеть 192.168.1.0. Этого должно быть достаточно. Если же именно натить хотите, то нужна отдельная запись для этого:

iptables -t nat -A POSTROUTING -o ipsec0 -d 10.0.0.0/8 -j SNAT --to-source 192.168.1.1

И маскарадинг тут не подойдет, нужен именно SNAT:

iptables -t nat -a postrouting -o ppp0 \! -d 10.0.0.0/8 -j SNAT --to-source $ppp0_IFACE

где $ppp0_IFACE - IP-адрес Вашего ppp0-интерфейса.

Но еще раз повторю, гораздо лучше не заморачиваться с натом, а настроить нормальную двустороннюю маршрутизацию.

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

Спасибо.Ок. У меня есть...

1.Удаленная сторона с некой циской. 2. Мой сервер с 2мя интерфейсами 3G(ppp0) и Eth0 (192.168.1.1). Этот сервер должен давать IP(192.168.1.0/32) по DHCP клиентам и запросы от клиентов на локальную сеть пропбрасывать через себя в тоннель. Сам сервер успешно все доступа имеет. А клиент никак не попадает в локалку. Вот так вот яхочу сделать уже четвертые сутки )

З.Ы. Была такая ситуация. Я проверял очередной конфиг iptables и на клиенте с ip 192.168.1.2 была запущена консоль с ping 10.10.1.10 (к примеру) и при перезапуске strongswan пинги пошли. Но перестали идти с сервера. Я обрадовался, прервал на клиенте ping, запустил еще раз и все. Пинги больше не шли. Видать или strongswan что-то ломает при перезагрузке или я не так настраивал что-то

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

1.Удаленная сторона с некой циской.

Вот на этой циске (если я правильно Вас понял, и туннель ipsec на ней заканчивается) и настраивайте маршрутизацию в сеть 192.168.1.0

192.168.1.0/32

Это всего 1 адрес. Если Вы с маской не ошиблись, то ничего удивительного нет в том, что остальные адреса из сети 192.168.1.0 не маршрутизируются.

Serge10 ★★★★★
()
Ответ на: комментарий от mplane

Проблема решилась обновлением версии Strongswan. Дело в том, что в Centos 6 репозиторий закрыт. Я решил переделать все с установкой наиболее свежих пакетов доступных под данную ОС. И бинго! strongswan-5.4.0-2.el6.i686.rpm решил мою проблему. Самое что первое бростлось в глаза это отсутствие интерфейса ipsec0. Всем спасибо!

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