URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 96029
[ Назад ]

Исходное сообщение
"IPSec Racoon"

Отправлено golibshoh , 03-Мрт-15 12:51 
Есть два сервера с FreeBSD 10.1 RELEASE-p5. Задача такая, нужно объединить две локалки за серверами чтобы можно было работать как одна сеть. По скольку есть опыт в этом деле решил поднять VPN через IPSec, Racoon и gif интерфейс (где то читал что и без gif-а можно, только нужно будет прописать роути и всё такое), именно это было уже мною проделана в FreeBSD 9. Как пологается сначало сделал как умел, установка ipsec racoon, добавление и правка файлов конфигурации в ipsec.conf racoon.conf, rc.conf , также есть в ядре объявлений интерфейс ГИФ, IPSEC, короче всё что делал раньше на FreeBSD 9, но ничего не получилось. Потом взял инструкцию из офф.сайта https://www.freebsd.org/doc/ru/books/handbook/ipsec.html и дошел только до добавление правилы в ipfw (ipfw add 1 allow ip from any to any via gif0) а пинг то не идет.

Что сделал:
srv1#ifconfig gif0 A.B.C.D W.X.Y.Z
srv1#ifconfig gif0 inet 192.168.0.1 192.168.1.1 netmask 0xffffffff

srv2#ifconfig gif0 W.X.Y.Z A.B.C.D
srv2#ifconfig gif0 inet 192.168.1.1 192.168.0.1 netmask 0xffffffff

А вот и результат команды:
srv2#ifconfig gif0
gif0: flags=8051<UP, POINTPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
      tunnel inet server1_real_ip --> server2_real_ip
      inet 192.168.0.1 --> 192.168.1.1 netmask 0xffffffff
      nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Были бы логи можно было узнать где причина, так откуда взять сообщение об ошибку то? В какую сторону идти то? Ещё кое что, объязательно чтобы вторая сетевая карта (192.168.0.1 и 192.168.1.1) у серверов на момент настройки был подключен к коммутатору чтобы пингы прошли? Просто чтобы один сервер мог увидеть серый адрес второго сервера. Жду ответа, как соловей лето. Спасибо.


Содержание

Сообщения в этом обсуждении
"IPSec Racoon"
Отправлено Сергей , 03-Мрт-15 13:46 
Надеюсь racoon вы не стартовали?

"IPSec Racoon"
Отправлено golibshoh , 03-Мрт-15 13:58 
>  Надеюсь racoon вы не стартовали?

в первый раз, когда делал по старинке, стартовал, после несколько синтаксических ошибок (оказывается есть различие между 9 и 10 в синтаксисах команд) при наборе команды
racoon -F -d -v просто зависает. А сейчас пока до установки IPSEC-а него не дошли, а дэмон racoon же ставится вместе с ним.


"IPSec Racoon"
Отправлено golibshoh , 03-Мрт-15 17:09 
в ipfw есть правила разрешаюший вес трафик проходяший по интерфейсу gif0
ipfw add allow all from any to any via gif0

"IPSec Racoon"
Отправлено golibshoh , 03-Мрт-15 19:40 
> в ipfw есть правила разрешаюший вес трафик проходяший по интерфейсу gif0
> ipfw add allow all from any to any via gif0

если это вопрос то да, я добавил его в первую очередь


"IPSec Racoon"
Отправлено golibshoh , 03-Мрт-15 19:45 
>> в ipfw есть правила разрешаюший вес трафик проходяший по интерфейсу gif0
>> ipfw add allow all from any to any via gif0
> если это вопрос то да, я добавил его в первую очередь

вааахахахахаха ооооййй немогу, я отвечаю сам себе, по моему нужно отдохнуть немного


"IPSec Racoon"
Отправлено butcher , 05-Мрт-15 14:08 
> Были бы логи можно было узнать где причина, так откуда взять сообщение
> об ошибку то? В какую сторону идти то? Ещё кое что,
> объязательно чтобы вторая сетевая карта (192.168.0.1 и 192.168.1.1) у серверов на
> момент настройки был подключен к коммутатору чтобы пингы прошли? Просто чтобы

Не обязательно.

> один сервер мог увидеть серый адрес второго сервера. Жду ответа, как
> соловей лето. Спасибо.

Скорее всего, когда вы запускали ракун, у вас установились политики безопасности. Но т.к. сам ракун вы так и не настроили, то серверы не договорились между собой, какие SA им импользовать.

Очистите список политик безопасности: setkey -FP
Настройте сначала связь без IPsec.
Должны пинговаться внешние адреса туннля: A.B.C.D и W.X.Y.Z.
Если адреса пингуются, должны пинговаться внутренние адреса туннеля 192.168.0.1 и 192.168.1.1. И вообще, логичнее было бы назначать внутри туннеля адреса из одной подсети, но в данном случае это не так важно. Если вы хотие объединить ваши сети, то вам нужно использовать gif(4) в режиме EtherIP, для этого надо объединять gif(4) c интерфейсом, смотрящим в локалку в bridge(4). Когда настроите это, можно приступать к шифрованию. Конечно, более правильно с точки зрения безопасности было бы сразу настроить шифрование :)


"IPSec Racoon"
Отправлено golibshoh , 06-Мрт-15 07:12 
> Очистите список политик безопасности: setkey -FP
> Настройте сначала связь без IPsec.
> Должны пинговаться внешние адреса туннля: A.B.C.D и W.X.Y.Z.
> Если адреса пингуются, должны пинговаться внутренние адреса туннеля 192.168.0.1 и 192.168.1.1.
> И вообще, логичнее было бы назначать внутри туннеля адреса из одной
> подсети, но в данном случае это не так важно. Если вы
> хотие объединить ваши сети, то вам нужно использовать gif(4) в режиме
> EtherIP, для этого надо объединять gif(4) c интерфейсом, смотрящим в локалку
> в bridge(4). Когда настроите это, можно приступать к шифрованию. Конечно, более
> правильно с точки зрения безопасности было бы сразу настроить шифрование :)

Спасибо, попробую.


"IPSec Racoon"
Отправлено pavel , 06-Мрт-15 07:36 

> И вообще, логичнее было бы назначать внутри туннеля адреса из одной
> подсети,

тоже бросилось в глаза.
> но в данном случае это не так важно. Если вы
> хотие объединить ваши сети, то вам нужно использовать gif(4) в режиме
> EtherIP, для этого надо объединять gif(4) c интерфейсом, смотрящим в локалку
> в bridge(4). Когда настроите это, можно приступать к шифрованию. Конечно, более
> правильно с точки зрения безопасности было бы сразу настроить шифрование :)

я бы еще потестил скорости с бриджем и роутингом-при объединении сетей ой как производительность нужна.



"IPSec Racoon"
Отправлено golibshoh , 07-Мрт-15 17:01 
ОПА! я только внимательнее дочитал вашее сообшение, и как сделать этот бридж между gif и локальным интерфейсом? что то немог разобратся какой тип бриджа мне использовать. Тут говорится по меншей мере о 4-х,при чем какой актуален для FreeBSD10?

"IPSec Racoon"
Отправлено butcher , 08-Мрт-15 01:13 
> ОПА! я только внимательнее дочитал вашее сообшение, и как сделать этот бридж
> между gif и локальным интерфейсом? что то немог разобратся какой тип
> бриджа мне использовать. Тут говорится по меншей мере о 4-х,при чем
> какой актуален для FreeBSD10?

Судя по тому что вы написали про разные подсети в локалках, bridge вам не нужен.


"IPSec Racoon"
Отправлено golibshoh , 07-Мрт-15 11:09 
Итак, с проблемой почти разобрались, т.е.
Установили IPSec-tools (с дэмоном racoon)
добавили gif0 в rc.conf
gif_interfaces="gif0"
gifconfig_gif0="A.B.C.D Z.X.C.V"
ifconfig_gif0="inet 192.168.0.1 192.168.1.1 netmask 0xffffffff"
static_routes="vpn"
route_vpn="192.168.1.0/24 -interface gif0"
После этого проблема не решилась даже серверы внутренные адреса друг друга не пинговались и при наборе ifconfig gif0 вывод был таким:
flags=8052<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
tunnel inet A.B.C.D --> Z.X.C.V
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

Попробовал из консоли так,
ifconfig gif0 inet 192.168.1.1 192.168.0.1 netmask 255.255.255.0
результат команды ifconfig gif0 после этого
flags=8052<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
tunnel inet A.B.C.D --> Z.X.C.V
inet 192.168.1.1 --> 192.168.0.1 netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
и уже пинг между серверами по внутренными адресами пошло на ура, только вот хости за серверами даже другого сервера не пингуют. Вот резултать команды
#netstat -rn (на втором серерве у которго внутренная сеть 192.168.1.0/24)
Destination       Gateway      Flags       Netif Expire
....
192.168.1.0/24       link#4        UH         gif0
.....

#netstat -rn (на первом серерве у которго внутренная сеть 192.168.0.0/24)
....
192.168.1.0/24       gif0        US         gif0
.....


И так, по моему на сервере с подсетью 192.168.1.0/24 (вторая) не правильно но как и как исправить?


"IPSec Racoon"
Отправлено golibshoh , 07-Мрт-15 16:52 
и так для любознательных пойдем дальше:
у нас есть: пинг от сервера к серверу по обоим адресам (внешный и внутренный грубо говоря:))
ни один сервер не пингует "клиенты" другого сервера
проверил через tcpdump интерфейс gif0 во время пинга они до него доходят, только ответа нет, по моему тут дело в том что пакеты от интерфейса gif0 не попадают на bge0 (внутренный интерфейс сервера на котором и прописан 192.168.0.1)... или же я сошел с ума. Как привязать ихдруг к другу?

"IPSec Racoon"
Отправлено butcher , 08-Мрт-15 01:11 
> и так для любознательных пойдем дальше:
> у нас есть: пинг от сервера к серверу по обоим адресам (внешный
> и внутренный грубо говоря:))
> ни один сервер не пингует "клиенты" другого сервера

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

[host A]<-->[server A]<-- Internet -->[server B]<-->[host B]

Чтобы host B видел host A, в таблицах маршрутизации обоих хостов должны быть соответствующие маршруты. И собственно server A и B должны считать себя маршрутизаторами, чтобы маршрутизировать пакеты предназначенные не себе. Это включается опцией gateway_enable="YES", так же известной как sysctl net.inet.ip.forwarding=1.


"IPSec Racoon"
Отправлено golibshoh , 09-Мрт-15 16:19 
И так, вот информация о состояние серверов и их таблиц маршрутизации:
(условно будем называть их srv1 и srv2)
На первом сервере перед выполнении команды
ifconfig gif0 inet 192.168.0.1 192.168.1.1 netmask 0xffffffff
srv1# ifconfig
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LINKSTATE>
    ether e:11:5b:e3:a2:7a
    inet srv1_ip netmask 0xfffffff8 broadcast my_broadcast_ip
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LINKSTATE>
    ether e4:11:5b:e3:a2:7b
    inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: Ethernet autoselect (none)
    status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
    inet 127.0.0.1 netmask 0xff000000
    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
    tunnel inet srv1_ip --> srv2_ip
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

Также в этом сервере
srv1# netstat –rn
Routing tables

Internet:
Destination        Gateway            Flags      Netif Expire
default            my_gateway_ip        UGS        bge0
77.95.1.232/29     link#1             U          bge0
srv1_ip        link#1             UHS         lo0
127.0.0.1          link#3             UH          lo0
192.168.0.0/24     link#2             U          bge1
192.168.0.1        link#2             UHS         lo0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0
::1                               link#3                        UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%lo0/64                     link#3                        U           lo0
fe80::1%lo0                       link#3                        UHS         lo0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%lo0/32                     ::1                           U           lo0

В этом же сервере после выполнении команды
srv1# ifconfig gif0 inet 192.168.0.1 192.168.1.1 netmask 0xffffffff
srv1# srv1# netstat –rn
Routing tables

Internet:
Destination        Gateway            Flags      Netif Expire
default            my_gateway_ip        UGS        bge0
77.95.1.232/29     link#1             U          bge0
srv1_ip        link#1             UHS         lo0
127.0.0.1          link#3             UH          lo0
192.168.0.0/24     link#2             U          bge1
192.168.0.1        link#2             UHS         lo0
192.168.1.1        link#4             UH         gif0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0
::1                               link#3                        UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%lo0/64                     link#3                        U           lo0
fe80::1%lo0                       link#3                        UHS         lo0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%lo0/32                     ::1                           U           lo0

На другом сервере
srv2# Ifconfig
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
    ether a4:5d:36:c4:40:20
    inet srv2_ip netmask 0xfffffff8 broadcast my_broadcast_ip
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
    ether a4:5d:36:c4:40:21
    inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: Ethernet autoselect (none)
    status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
    inet 127.0.0.1 netmask 0xff000000
    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1280
    tunnel inet srv2_ip --> srv1_ip
    inet 192.168.1.1 --> 192.168.0.1 netmask 0xffffffff
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>


srv2# netstat – rn
Routing tables

Internet:
Destination        Gateway            Flags      Netif Expire
default            my_gateway_ip        UGS        bge0
77.95.1.232/29     link#1             U          bge0
srv2_ip        link#1             UHS         lo0
127.0.0.1          link#3             UH          lo0
192.168.0.1        link#4             UH         gif0
192.168.1.0/24     link#2             U          bge1
192.168.1.1        link#2             UHS         lo0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0
::1                               link#3                        UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%lo0/64                     link#3                        U           lo0
fe80::1%lo0                       link#3                        UHS         lo0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%lo0/32                     ::1                           U           lo0

Обратите внимание на строку inet 192.168.1.1 --> 192.168.0.1 netmask 0xffffffff в резултате команды ifconfig она появляется только после команды ifconfig gif0 inet 192.168.0.1 192.168.1.1 netmask 0xffffffff (на обоих серверах) не смотря на то что в rc.conf на обеих серверах есть данная команда (ifconfig_gif0 =”inet 192.168.0.1 192.168.1.1 inet 0xffffffff”) в каждом сервере соответственно. Естественно до введение данной команды пинги даже между самими серверами отсутствуют, а после появятся только между серверами. И ещё, в таблице маршрутизации есть маршрут только до серверов (192.168.0.1 192.168.1.1 соответственно) а вот для сетей 192.168.0.0/24 и 192.168.1.0/24 не высвечивается, не смотря на то что она тоже в файле rc.conf существует в таком виде:
static_routes=”vpn”
route_vpn=”192.168.0.0/24 –interface gif0”
НО! Даже после ручного ввода роута пинги с хостов друг к другу или даже к другому серверу и обратно не идут. Точнее  пакеты поступают только до виртуального интерфейса gif0 , а ответов так и нет (просмотр через tcpdump). Вот я и подумал что бридж между gif0 и физическим внутренним интерфейсом это решить. Думаю в старой версии FreeBSD данную проблему разрешалось самой системой а в 10-ом почему то убрали, потому как там кроме всего вышесказанного ничего не надо было, и всё работала. Кстати, внешние адреса серверов из одной подсети, они вообще физический подсоединены в одном простом коммутаторе. И ещё, не влияет ли на всё это включенная поддержка IPv6? По моему я несу ерунду, ведь это же уровень три, ладно вот и всё на сегодня.