Почему именно GRE: легко, просто, удобно. А в сочетании с IPSEC довольно безопасно.
Исходные данные:
Создаем новый тоннель: Interfaces → GRE Tunnel, заполняем настройки:
Назначаем интерфейсу адрес:
IP → Addresses:
Разрешаем ходить пакетам:
IP → Firewall → Filter Rules, добавляем новое правило:
В файле /etc/network/interfaces добавляем интерфейс tun1 в самый конец файла:
iface tun1 inet static address 172.16.1.1 netmask 255.255.255.0 pre-up iptunnel add tun1 mode gre local YYY.YYY.YYY.YYY remote XXX.XXX.XXX.XXX ttl 255 up ifconfig tun1 multicast pointopoint 172.16.1.2 post-down iptunnel del tun1
Даем команду на поднятие тоннеля:
sudo ifup tun1
Проверяем - тоннель должен подняться. Для проверки можно попинговать внутренние IP 172.16.1.1 и 172.16.1.2 соответственно.
В тоннеле GRE по умолчанию нет никакой шифрации, т.е. данные ходят в открытом виде и все можно прекрасно посмотреть любым сниффером (tcpdump, wireshark). Для обеспечения безопасности необходимо настроить IPSEC.
Исходные данные:
IP → IPsec → Proposals
Изменяем default:
А в свойствах GRE-тоннеля настраиваем:
Для Ubuntu и прочих линуксов есть несколько пакетов: racoon и несколько форков *swan (StrongSwan, LibreSwan, OpenSwan). Я остановился на StrongSwan - т.к. он мне больше понравился и в сети много готовых примеров.
Установка проста:
sudo apt install strongswan
Редактируем файл конфигурации /etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file config setup charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2" conn %default # keyexchange=ikev2 conn mikrotik # Try connect on daemon start auto=start # Authentication by PSK (see ipsec.secret) authby=secret # Disable compression compress=no # Re-dial setings closeaction=clear dpddelay=30s dpdtimeout=150s dpdaction=restart # ESP Authentication settings (Phase 2) esp=aes128-sha256-modp1024,aes192-sha256-modp1024,aes256-sha256-modp1024 # UDP redirects forceencaps=no # IKE Authentication and keyring settings (Phase 1) ike=aes128-sha256-modp1024,aes192-sha256-modp1024,aes256-sha256-modp1024 ikelifetime=86400s keyingtries=%forever lifetime=1800s # Internet Key Exchange (IKE) version # Default: Charon - ikev2, Pluto: ikev1 keyexchange=ikev1 # connection type type=transport # Peers left=XXX.XXX.XXX.XXX right=YYY.YYY.YYY.YYY # Protocol type. May not work in numeric then need set 'gre' leftprotoport=47 rightprotoport=47
Добавляем ключ шифрования в файл /etc/ipsec.secrets
YYY.YYY.YYY.YYY XXX.XXX.XXX.XXX : PSK VerySecretChipherKey
Перезапускаем IPSEC:
sudo ipsec restart
Проверяем /var/log/syslog на Ubuntu и командой
ipsec status
На Mikrotik смотрим Log и IP → IPsec → Peers
Если есть проблемы при работе с тоннелем - желательно уменьшить MTU до 1435 на обоих концах туннеля.
Mikrotik: Изменить в свойствах GRE-тоннеля MTU на 1435
Ubuntu: В файле /etc/network/interfaces добавить строку в настройку интерфейса tun1
mtu 1435
Так же может понадобиться настройка firewall на Микротике и Ubuntu, но тут уж сам настраивает под себя.
Чтобы с Микротика все благополучно проходило через тоннель необходимо сделать маскарадинг:
IP → Firewall → NAT со следующими настройками: