вторник, 14 ноября 2017 г.

Quagga + Mikrotik + GRE/IPSec


Уже писал про свою домашнюю сеть два раза тут и тут. В последнее время выпадают относительно свободные вечера и я наконец-то решил начать приводить свою домашнюю сеть в порядок. Сегодня бытро расскажу как поднять GRE+IPSec между Mikrotik и Ubuntu. Также расскажу про своё первое знакомство с таким прекрасным инструментом как Quagga.


GRE

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

Начнем с Mikrotik'a. Обычно я настраиваю все через CLI, как приверженец "старой школы", но реально иногда проще накликать все в Winbox и не заморачиваться. Наверное, это "взрослость"... 

Короче, заходим в интерфейсы, далее вкладка GRE и добавляем новый интерфейс. Указываем наш локальный публичный IP и IP удаленной стороны. Чуть уменьшаем MTU и убираем галку Allow Fast Path, с IPSec все равно не заработает.


Идем в Ubuntu. У меня это 16.04, думаю, поднимется в любой современной версии. В /etc/network/interfaces пишем.

auto tun1
iface tun1 inet static
    address 10.0.0.6
    netmask 255.255.255.252
    pre-up iptunnel add tun1 mode gre local 80.XXX.XXX.XXX remote 109.XXX.XXX.XXX ttl 255
    up ifconfig tun1 multicast
    pointopoint 10.0.0.5
    mtu 1435
    post-down iptunnel del tun1

Чуть занижаем MTU и здесь же указываем IP адреса внутри туннеля. В нашем случае, это 10.0.0.6 на Ubuntu и 10.0.0.5 на Mikrotik. 

Возвращаемся на Mikrotik и настраиваем там нужный адрес, раз сначала забыли.


После таких непростых манипуляций все должно поднятся, если бы с обоих сторон не было файерволов. 

На Mikrotik'е это пара правил

add action=accept chain=input comment="Allow GRE from VPS" protocol=gre src-address=80.XXX.XXX.XXX
add action=accept chain=input comment="Allow any from VPS" in-interface=gre-tunnel1 src-address=10.0.0.4/30

На Ubuntu я традиционно использую многим ненавистный Shorewall. Если кратко, то он позволяет настраивать iptables не зная iptables... Мой случай...

Описываем наш будущий туннель в /etc/shorewall/tunnels. Указываем адрес нашего Mikrotik'a и определяем туннель к зоне net, что смотрит в публичную сеть. PPTP  сервер уже давно настроен.

###############################################################################
#TYPE                   ZONE            GATEWAY                 GATEWAY_ZONE
pptpserver              net             0.0.0.0/0
ipip                    net             109.XXX.XXX.XXX 

Добавляем туннельный интерфейс в новую зону rem в /etc/shorewall/interfaces. ens3 и ppp+ уже были настроены.

###############################################################################
#ZONE   INTERFACE       OPTIONS
net     ens3            dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
vpn     ppp+
rem     tun1

Теперь определяем политику по умолчанию для зоны rem в /etc/shorewall/policies. Пока разрешим ей обращаться только к файерволу.

###############################################################################
#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
$FW             all             ACCEPT
vpn             all             ACCEPT
rem             $FW             ACCEPT
all             all             DROP

Ну и все, shorewall check затем shorewall restart. После этого туннель должен поднятся и мы сможем попинговать 10.0.0.5 с Ubuntu.

IPSec

На Mikrotik'e уже был настроен L2TP/IPSec, поэтому я буду переиспользовать дефолтный Proposal с не самыми крутыми параметрами. Идем в IP, далее IPSEC.


Теперь нужно поставить strongswan в Ubuntu и настроить его.

aptitude install strongswan

Далее пишем наш конфиг в /etc/ipsec.conf. Не самый классный конфиг, но работает. Основные моменты это адреса, esp и ike параметры, тип и протокол 47.

сharondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2,  mgr 2"

conn %default
conn mikrotik
auto=start
authby=secret
compress=no
 
closeaction=clear
dpddelay=30s
dpdtimeout=150s
dpdaction=restart

esp=aes128-sha1-modp1024
forceencaps=no

ike=aes128-sha1-modp1024
ikelifetime=86400s
keyingtries=%forever
lifetime=1800s
 
keyexchange=ikev1

type=transport
 
left=80.XXX.XXX.XXX
right=109.XXX.XXX.XXX

leftprotoport=47
rightprotoport=47

Далее в /etc/ipsec.secrets пишем сам ключ

80.XXX.XXX.XXX 109.XXX.XXX.XXX : PSK "SecretNinja"

Последний указываем на GRE интерфейсе Mikrotik.


После чего интерфейсы поднимаются и трафик внутри них начинает бегать уже прикритый IPSec. В верификации нам поможет ipsec status на Ubuntu.

root@b842:~# ipsec status
Security Associations (1 up, 0 connecting):
    mikrotik[2]: ESTABLISHED 78 minutes ago, 80.xxx.xxx.xxx[80.xxx.xxx.xxx]...109.xxx.xxx.xxx[109.xxx.xxx.xxx]
    mikrotik{5}:  REKEYED, TRANSPORT, reqid 1, expires in 13 minutes
    mikrotik{5}:   80.xxx.xxx.xxx/32[gre] === 109.xxx.xxx.xxx/32[gre]
    mikrotik{6}:  INSTALLED, TRANSPORT, reqid 1, ESP SPIs: c64cacf4_i 029c733c_o
    mikrotik{6}:   80.xxx.xxx.xxx/32[gre] === 109.xxx.xxx.xxx/32[gre]

На микротике должа появится соответсвующая политика в статусе established.


Все пингуется, все хорошо, но не руками же прописывать маршруты в конце-то концов...

Quagga

Честно говоря, я впервые с ней столкнулся и она прям классная! Ставим!

aptitude install quagga

Далее включаем протоколы в /etc/quagga/daemons. Пока ограничимся OSPF, но в будущем добавлю и OSPFv3, т.к. внутри моей сети он уже поднят.

zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no
isisd=no
babeld=no

Далее копируем конфиги из /usr/share/doc/quagga/examples/ в /etc/quagga/ и рестартуем его /etc/init.d/quagga restart.

А теперь самая прикольная часть... Я офигел, чесслово....


Да ну!.. Бежим на микротик и добавляем там gre интерфейс в OSPF.


Снова возвращаемся на Quagga.... ну же, быстрей!


Вот это да. Я в своей жизни что только не настраивал, но quagga меня почему-то поразила. Возмжно, я просто ожидал копания в конфигах и прочего такого "линуксоидного"... а тут все так привычно и по-домашнему....

Все, теперь наша Ubuntu машина подключена к домашней сети через GRE и все это дело зашифровано с помощью старого доброго IPSec. Ну и, конечно же, теперь не придется прописывать маршруты руками. Тем более, я не помню как это делается в Ubuntu. Проше было "квагу" поставить. )

Комментариев нет:

Отправить комментарий