iRWX.RU

Personal IT notes.

MikroTik: EoIP туннель между статическим и динамическим IP адресами

Настройка EoIP на MikroTik требует статических IP адресов с одной и другой стороны туннеля. Часто бывает, что статический адрес только с одной стороны. Выход — использовать двойное туннелирование. В данном примере будем использовать PPTP, хотя можно использовать L2TP или SSTP.

Имеем схему:

Имеется VPN Сервер, который находится за маршрутизатором с NAT, на котором настроен проброс 1723 TCP порта. Далее этот маршрутизатор подключен к провайдеру, раздающему динамические IP адреса VPN клиенту. Требуется чтобы TestPC1 соединился с TestPC2.

Поехали.

Первоначальные настройки

Настройка VPN Сервера
/system identity
set name=Server

/interface bridge
add name=BR_LAN protocol-mode=none
add name=BR_WAN protocol-mode=none

/interface bridge port
add bridge=BR_WAN interface=ether1
add bridge=BR_LAN interface=ether2

/ip address
add address=10.0.0.10/24 interface=BR_WAN

/ip route
add gateway=10.0.0.1

# Создадим «песочницу» куда будет терминироваться PPTP туннель.
/interface bridge
add name=BR_PPTP_SANDBOX protocol-mode=none

# Поместим «песочницу» в отдельный VRF
/ip route vrf
add interfaces=BR_PPTP_SANDBOX routing-mark=VRF_SANDBOX_FOR_PPTP

# В фаерволле разрешаем только IPSec и GRE для PPTP подключений
/ip firewall filter
add action=accept chain=input in-interface=all-ppp protocol=ipsec-esp
add action=accept chain=input dst-port=500 in-interface=all-ppp protocol=udp
add action=accept chain=input dst-port=4500 in-interface=all-ppp protocol=udp
add action=accept chain=input in-interface=all-ppp protocol=gre
add action=drop chain=input in-interface=all-ppp
add action=drop chain=forward in-interface=all-ppp
Настройка VPN Клиента
/system identity
set name=Client

/interface bridge
add name=BR_LAN protocol-mode=none
add name=BR_WAN protocol-mode=none

/interface bridge port
add bridge=BR_WAN interface=ether1
add bridge=BR_LAN interface=ether2

# Аренда IP адреса от провайдера
/ip dhcp-client
add interface=BR_WAN dhcp-options=hostname,clientid disabled=no

Настроим PPTP туннель

Со стороны VPN Сервера
# Профили для сервера и клиентского подключения
/ppp profile
add name=PROF_PPP_PPTP_SERVER change-tcp-mss=no
add name=PROF_PPP_PPTP_REMOTE_CLIENT bridge=BR_PPTP_SANDBOX change-tcp-mss=no \
local-address=172.16.0.1 remote-address=172.16.0.2 use-encryption=required

# Пароль для VPN Клиента
/ppp secret
add name=Rem0te_Cl1ent password="P@\$\$w0rD" \
profile=PROF_PPP_PPTP_REMOTE_CLIENT service=pptp

# Включаем PPTP сервис
/interface pptp-server server
set authentication=mschap2 default-profile=PROF_PPP_PPTP_SERVER enabled=yes
Со стороны VPN Клиента
# Принудительно включаем в профиле какое-никакое шифрование MPPE128.
/ppp profile
add change-tcp-mss=no name=PROF_PPP_PPTP use-encryption=required

# Создаем PPTP подключение
/interface pptp-client
add name=PPTP_CLIENT allow=mschap2 connect-to=2.2.2.2 disabled=no \
password="P@\$\$w0rD" profile=PROF_PPP_PPTP user=Rem0te_Cl1ent
Смотрим лог на VPN Сервере

[admin@Server] /log> print
...
09:28:13 pptp,info TCP connection established from 1.1.1.200 
09:28:13 pptp,ppp,info,account Rem0te_Cl1ent logged in, 172.16.0.2 
09:28:13 pptp,ppp,info : authenticated 
09:28:13 pptp,ppp,info : connected 
09:28:13 pptp,ppp,info : using encoding - MPPE128 stateless 
…
[admin@Server] > /ppp active print 
Flags: R - radius 
 #   NAME         SERVICE CALLER-ID         ADDRESS         UPTIME   ENCODING  
 0   Rem0te_Cl... pptp    1.1.1.200         172.16.0.2      12m45s   MPPE128…

Настроим EoIP туннель

Со стороны VPN Сервера
# Мелкий тюнинг
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha512 enc-algorithms=aes-256-cbc

# Создаем EoIP туннель
# В качестве local-address и  remote-address указываем адреса PPTP туннеля
/interface eoip
add allow-fast-path=no ipsec-secret="1P\$ec_KeY" \
local-address=172.16.0.1 mac-address=02:C8:47:D3:39:EF \
name=EoIP_TUNNEL remote-address=172.16.0.2 tunnel-id=0

# Добавляем EoIP туннель в бридж BR_LAN
/interface bridge port
add bridge=BR_LAN interface=EoIP_TUNNEL
Со стороны VPN Клиента зеркальные настройки
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha512 enc-algorithms=aes-256-cbc

/interface eoip
add name=EoIP_TUNNEL allow-fast-path=no ipsec-secret="1P\$ec_KeY" \
local-address=172.16.0.2 remote-address=172.16.0.1 tunnel-id=0

/interface bridge port
add bridge=BR_LAN interface=EoIP_TUNNEL
Смотрим лог со стороны VPN Сервера.

[admin@Server] > /log print
...
09:28:14 ipsec,info initiate new phase 1 (Identity Protection): 172.16.0.1[500]<=>172.16.0.2[500] 
09:28:14 ipsec,info respond new phase 1 (Identity Protection): 172.16.0.1[500]<=>172.16.0.2[500] 
09:28:14 ipsec,info ISAKMP-SA established 172.16.0.1[500]-172.16.0.2[500] spi:27fc72bf 
09:28:23 interface,info EoIP_TUNNEL link up 
…

Боремся с фрагментацией в EoIP туннеле

На VPN Сервере и на VPN Клиенте настройки идентичные.

/interface bridge settings
set use-ip-firewall=yes

/ip firewall mangle
add action=change-mss chain=forward in-interface=BR_LAN new-mss=1360 \
passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1361-65535

PS

В реальной схеме VPN Клиент выполнял еще роль шлюза в интернет. Так вот на ПК, выходящих через него в сеть, половина сайтов открывалась, другая — нет. С туннелем проблем не наблюдалась. Симптомы как с фрагментацией трафика. В итоге решением проблемы было — прописать на интерфейсе EoIP MTU равным 1500.

Конфигурация VPN Server
/interface bridge
add name=BR_LAN protocol-mode=none
add name=BR_PPTP_SANDBOX protocol-mode=none
add name=BR_WAN protocol-mode=none
/interface ethernet
set [ find default-name=ether1 ] comment=WAN disable-running-check=no
set [ find default-name=ether2 ] comment=LAN disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
/interface eoip
add allow-fast-path=no comment=FORCED_MTU_1500 ipsec-secret=»1P\$ec_KeY» \
local-address=172.16.0.1 mac-address=02:C8:47:D3:39:EF mtu=1500 name=\
EoIP_TUNNEL remote-address=172.16.0.2 tunnel-id=0
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha512 enc-algorithms=aes-256-cbc
/ppp profile
add change-tcp-mss=no name=PROF_PPP_PPTP_SERVER
add bridge=BR_PPTP_SANDBOX change-tcp-mss=no local-address=172.16.0.1 name=\
PROF_PPP_PPTP_REMOTE_CLIENT remote-address=172.16.0.2 use-encryption=\
required
/interface bridge port
add bridge=BR_WAN interface=ether1
add bridge=BR_LAN interface=ether2
add bridge=BR_LAN interface=EoIP_TUNNEL
/interface bridge settings
set use-ip-firewall=yes
/interface pptp-server server
set authentication=mschap2 default-profile=PROF_PPP_PPTP_SERVER enabled=yes
/ip address
add address=10.0.0.10/24 interface=BR_WAN network=10.0.0.0
/ip firewall filter
add action=accept chain=input in-interface=all-ppp protocol=ipsec-esp
add action=accept chain=input dst-port=500 in-interface=all-ppp protocol=udp
add action=accept chain=input dst-port=4500 in-interface=all-ppp protocol=udp
add action=accept chain=input in-interface=all-ppp protocol=gre
add action=drop chain=input in-interface=all-ppp
add action=drop chain=forward in-interface=all-ppp
/ip firewall mangle
add action=change-mss chain=forward in-interface=BR_LAN new-mss=1360 \
passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1361-65535
/ip route
add distance=1 gateway=10.0.0.1
/ip route vrf
add interfaces=BR_PPTP_SANDBOX routing-mark=VRF_SANDBOX_FOR_PPTP
/ppp secret
add name=Rem0te_Cl1ent password=»P@\$\$w0rD» profile=\
PROF_PPP_PPTP_REMOTE_CLIENT service=pptp
/system identity
set name=Server
Конфигурация VPN Client
/interface bridge
add name=BR_LAN protocol-mode=none
add name=BR_WAN protocol-mode=none
/interface ethernet
set [ find default-name=ether1 ] comment=WAN disable-running-check=no
set [ find default-name=ether2 ] comment=LAN disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
/interface eoip
add allow-fast-path=no comment=FORCED_MTU_1500 ipsec-secret=»1P\$ec_KeY» \
local-address=172.16.0.2 mac-address=02:D8:4F:2C:88:E0 name=EoIP_TUNNEL \
remote-address=172.16.0.1 tunnel-id=0
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha512 enc-algorithms=aes-256-cbc
/ppp profile
add change-tcp-mss=no name=PROF_PPP_PPTP use-encryption=required
/interface pptp-client
add allow=mschap2 connect-to=2.2.2.2 disabled=no name=PPTP_CLIENT password=\
«P@\$\$w0rD» profile=PROF_PPP_PPTP user=Rem0te_Cl1ent
/interface bridge port
add bridge=BR_WAN interface=ether1
add bridge=BR_LAN interface=ether2
add bridge=BR_LAN interface=EoIP_TUNNEL
/interface bridge settings
set use-ip-firewall=yes
/ip dhcp-client
add comment=Dynamic_IP_from_ISP dhcp-options=hostname,clientid disabled=no \
interface=BR_WAN
/ip firewall mangle
add action=change-mss chain=forward in-interface=BR_LAN new-mss=1360 \
passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1361-65535
/ip route
add distance=1 gateway=1.1.1.1
/system identity
set name=Client
Конфигурация NAT GW
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
/ip address
add address=2.2.2.2/24 interface=ether1 network=2.2.2.0
add address=10.0.0.1/24 interface=ether2 network=10.0.0.0
/ip firewall filter
add action=accept chain=forward comment=PERMIT_PPTP dst-port=1723 \
in-interface=ether1 protocol=tcp
add action=accept chain=forward in-interface=ether1 protocol=gre
add action=accept chain=input comment=PERMIT_NEIGHTBOR_DISCOVERY dst-port=\
5678 in-interface=ether1 protocol=udp
add action=drop chain=forward comment=DENY_ANY_FROM_WAN in-interface=ether1
add action=drop chain=input in-interface=ether1
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1 src-address=10.0.0.10
add action=dst-nat chain=dstnat dst-address=2.2.2.2 dst-port=1723 \
in-interface=ether1 protocol=tcp to-addresses=10.0.0.10 to-ports=1723
/ip route
add distance=1 gateway=2.2.2.1
/system identity
set name=NAT_GW
Конфигурация ISP
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
/ip pool
add name=POOL_DHCP ranges=1.1.1.100-1.1.1.200
/ip dhcp-server
add address-pool=POOL_DHCP disabled=no interface=ether1 name=SERVER_DHCP
/ip address
add address=1.1.1.1/24 interface=ether1 network=1.1.1.0
add address=2.2.2.1/24 interface=ether2 network=2.2.2.0
/ip dhcp-server network
add address=1.1.1.0/24 gateway=1.1.1.1 netmask=24
/system identity
set name=ISP

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *