Канал FreeBSD<==>Cisco (GRE,IPSec,OSPF)
Добавлено: 19 янв 2015, 09:04
Введение:
Подобную штуку я уже делал, но вот реалии изменились - на виртуальном хостинге стали доступны сервера на FreeBSD и я с удовольствием начал перебираться на эту систему. Первое что надо было сделать - это настроить тунель, и желательно защищённый. Схему будем брать с тойю статьи, но попробуем использовать полученный опыт. Если раньше я пытался сделать так, что бы cisco цеплялась на сервер, то теперь попробую сервер зацепить клиентом к cisco.
План работ:
Решать данную задачу я буду в несколько этапов:
1) Создание GRE тунеля
2) Защита тунеля IPSec
3) Создание маршрутизации на OSPF
4) Автоматизация процесса
5) Мониторинг
Дано:
1) Сервер FreeBSD 10.1 полностью обновлённый "на сейчас"
2) Cisco 1841
3) Желание воплатить всё задуманное
Работы - создание GRE:
На первом этапе мы попробуем просто создать GRE тунель между фрёй и cisco. Для этого нам понадобится 2 ИП адреса, которые мы дадим тунельным интерфейсам устройств - выделяем для этого подсеть 172.16.0.0/29 - ну так, с запасом ))) Давайте сразу договоримся что 172.16.0.1 - это Cisco а 172.16.0.2 - FreeBSD.
Работы начнём с Cisco, ибо проще - на ней надо создать тунельный интерфейс:
По строкам:
1) имя номер интерфейса можете задать любой свободный
2) прописываем ИП адрес и маску подсети
3) GRE отбирает байтики, плюс у меня PPPOE работает - страхуюсь, ставлю много ниже
4) Интернетовский порт на Cisco (можно указать IP адрес, но у меня он динамический)
5) Интернетовский IP адрес сервера
Теперь настраиваем сервер:
В файл /etc/rc.conf добавляем
Хотите перегружайтесь, хотите подгружайте модуль руками, но когда всё сделаете можете попробовать поднять тунель
Тут мы сначала пишем адреса сервера, потом удалённой стороны
На фре это будет выглядеть так
Вроде как тунель есть, но его нет. Тунель поднимется и будет жить только тогда, когда по нему идёт трафик. Таким образом что бы он заработал - надо как минимум пингануть удалённый узел - если сделали всё верно - тунель должен подняться и пинги должны идти
PS:
я не забыл добавить if_gre_load="YES" в файл /boot/loader.conf или написать gre_enable="YES" в /etc/rc.conf и сознательно в этом же файле не написал - первое не нужно - оно итак работает, а последнее бесполезно, ибо у меня тунель поднимать будет всёравно скрипт автоматизации
Траблешутинг:
На самом деле данная конфигурация работает сразу и безотказно, если всё сделано верно. Остальные случаи делятся на:
1) Неверно или не в той последовательности указали IP адреса
2) Провайдер режет GRE (или вы сами забыли снять файрвол)
Литература:
Послесловие:
Ну а теперь, когда мы вдохновились этим успехом - приступим к самому интересному и сложному
Подобную штуку я уже делал, но вот реалии изменились - на виртуальном хостинге стали доступны сервера на FreeBSD и я с удовольствием начал перебираться на эту систему. Первое что надо было сделать - это настроить тунель, и желательно защищённый. Схему будем брать с тойю статьи, но попробуем использовать полученный опыт. Если раньше я пытался сделать так, что бы cisco цеплялась на сервер, то теперь попробую сервер зацепить клиентом к cisco.
План работ:
Решать данную задачу я буду в несколько этапов:
1) Создание GRE тунеля
2) Защита тунеля IPSec
3) Создание маршрутизации на OSPF
4) Автоматизация процесса
5) Мониторинг
Дано:
1) Сервер FreeBSD 10.1 полностью обновлённый "на сейчас"
2) Cisco 1841
3) Желание воплатить всё задуманное
Работы - создание GRE:
На первом этапе мы попробуем просто создать GRE тунель между фрёй и cisco. Для этого нам понадобится 2 ИП адреса, которые мы дадим тунельным интерфейсам устройств - выделяем для этого подсеть 172.16.0.0/29 - ну так, с запасом ))) Давайте сразу договоримся что 172.16.0.1 - это Cisco а 172.16.0.2 - FreeBSD.
Работы начнём с Cisco, ибо проще - на ней надо создать тунельный интерфейс:
Код: Выделить всё
interface Tunnel3
ip address 172.16.0.1 255.255.255.248
ip mtu 1400
tunnel source Dialer1
tunnel destination YYY.YYY.YYY.YYY
1) имя номер интерфейса можете задать любой свободный
2) прописываем ИП адрес и маску подсети
3) GRE отбирает байтики, плюс у меня PPPOE работает - страхуюсь, ставлю много ниже
4) Интернетовский порт на Cisco (можно указать IP адрес, но у меня он динамический)
5) Интернетовский IP адрес сервера
Теперь настраиваем сервер:
В файл /etc/rc.conf добавляем
Код: Выделить всё
cloned_interfaces="gre0"
Тут мы сначала пишем адреса сервера, потом удалённой стороны
Код: Выделить всё
/sbin/ifconfig gre0 inet 172.16.0.2 172.16.0.1 netmask 255.255.255.248 tunnel YYY.YYY.YYY.YYY XXX.XXX.XXX.XXX llink1 up
Код: Выделить всё
root@mail:/etc #ifconfig
gre0: flags=b051<UP,POINTOPOINT,RUNNING,LINK0,LINK1,MULTICAST> metric 0 mtu 1476
tunnel inet YYY.YYY.YYY.YYY --> XXX.XXX.XXX.XXX
inet6 fe80::601:3aff:fe55:6e01%gre0 prefixlen 64 scopeid 0x3
inet 172.16.0.2 --> 172.16.0.1 netmask 0xfffffff8
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Код: Выделить всё
root@mail:/etc # ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1): 56 data bytes
64 bytes from 172.16.0.1: icmp_seq=0 ttl=255 time=63.739 ms
64 bytes from 172.16.0.1: icmp_seq=1 ttl=255 time=63.465 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=255 time=63.678 ms
я не забыл добавить if_gre_load="YES" в файл /boot/loader.conf или написать gre_enable="YES" в /etc/rc.conf и сознательно в этом же файле не написал
Код: Выделить всё
ifconfig_gre0="172.16.0.2 172.16.0.1 netmask 255.255.255.248 tunnel YYY.YYY.YYY.YYY XXX.XXX.XXX.XXX link1 up"
Траблешутинг:
На самом деле данная конфигурация работает сразу и безотказно, если всё сделано верно. Остальные случаи делятся на:
1) Неверно или не в той последовательности указали IP адреса
2) Провайдер режет GRE (или вы сами забыли снять файрвол)
Литература:
Послесловие:
Ну а теперь, когда мы вдохновились этим успехом - приступим к самому интересному и сложному