Есть два сервера с 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 0xffffffffsrv2#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) у серверов на момент настройки был подключен к коммутатору чтобы пингы прошли? Просто чтобы один сервер мог увидеть серый адрес второго сервера. Жду ответа, как соловей лето. Спасибо.
Надеюсь racoon вы не стартовали?
> Надеюсь racoon вы не стартовали?в первый раз, когда делал по старинке, стартовал, после несколько синтаксических ошибок (оказывается есть различие между 9 и 10 в синтаксисах команд) при наборе команды
racoon -F -d -v просто зависает. А сейчас пока до установки IPSEC-а него не дошли, а дэмон racoon же ставится вместе с ним.
в ipfw есть правила разрешаюший вес трафик проходяший по интерфейсу gif0
ipfw add allow all from any to any via gif0
> в ipfw есть правила разрешаюший вес трафик проходяший по интерфейсу gif0
> ipfw add allow all from any to any via gif0если это вопрос то да, я добавил его в первую очередь
>> в ipfw есть правила разрешаюший вес трафик проходяший по интерфейсу gif0
>> ipfw add allow all from any to any via gif0
> если это вопрос то да, я добавил его в первую очередьвааахахахахаха ооооййй немогу, я отвечаю сам себе, по моему нужно отдохнуть немного
> Были бы логи можно было узнать где причина, так откуда взять сообщение
> об ошибку то? В какую сторону идти то? Ещё кое что,
> объязательно чтобы вторая сетевая карта (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). Когда настроите это, можно приступать к шифрованию. Конечно, более правильно с точки зрения безопасности было бы сразу настроить шифрование :)
> Очистите список политик безопасности: 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). Когда настроите это, можно приступать к шифрованию. Конечно, более
> правильно с точки зрения безопасности было бы сразу настроить шифрование :)Спасибо, попробую.
> И вообще, логичнее было бы назначать внутри туннеля адреса из одной
> подсети,тоже бросилось в глаза.
> но в данном случае это не так важно. Если вы
> хотие объединить ваши сети, то вам нужно использовать gif(4) в режиме
> EtherIP, для этого надо объединять gif(4) c интерфейсом, смотрящим в локалку
> в bridge(4). Когда настроите это, можно приступать к шифрованию. Конечно, более
> правильно с точки зрения безопасности было бы сразу настроить шифрование :)я бы еще потестил скорости с бриджем и роутингом-при объединении сетей ой как производительность нужна.
ОПА! я только внимательнее дочитал вашее сообшение, и как сделать этот бридж между gif и локальным интерфейсом? что то немог разобратся какой тип бриджа мне использовать. Тут говорится по меншей мере о 4-х,при чем какой актуален для FreeBSD10?
> ОПА! я только внимательнее дочитал вашее сообшение, и как сделать этот бридж
> между gif и локальным интерфейсом? что то немог разобратся какой тип
> бриджа мне использовать. Тут говорится по меншей мере о 4-х,при чем
> какой актуален для FreeBSD10?Судя по тому что вы написали про разные подсети в локалках, bridge вам не нужен.
Итак, с проблемой почти разобрались, т.е.
Установили 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 (вторая) не правильно но как и как исправить?
и так для любознательных пойдем дальше:
у нас есть: пинг от сервера к серверу по обоим адресам (внешный и внутренный грубо говоря:))
ни один сервер не пингует "клиенты" другого сервера
проверил через tcpdump интерфейс gif0 во время пинга они до него доходят, только ответа нет, по моему тут дело в том что пакеты от интерфейса gif0 не попадают на bge0 (внутренный интерфейс сервера на котором и прописан 192.168.0.1)... или же я сошел с ума. Как привязать ихдруг к другу?
> и так для любознательных пойдем дальше:
> у нас есть: пинг от сервера к серверу по обоим адресам (внешный
> и внутренный грубо говоря:))
> ни один сервер не пингует "клиенты" другого сервераЧтобы сязь была, оба участника связи должны знать о друг друге. Т.е. хорошо конечно, что вы себе представляете топологию вашей сети, но её должны представлять и участники (маршрутизаторы, серверы и клиенты).
[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.
И так, вот информация о состояние серверов и их таблиц маршрутизации:
(условно будем называть их 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 tablesInternet:
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 lo0Internet6:
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 tablesInternet:
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 gif0Internet6:
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 tablesInternet:
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 lo0Internet6:
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? По моему я несу ерунду, ведь это же уровень три, ладно вот и всё на сегодня.