Занимался переводом сети их VPN туннелей с оборудования D link DV 804 HV на Mikrotik. При переводе возникли проблемы решением которых поделюсь с Вами.
Но для начала немного вводных данных.
Дано 192.168.0.0/21 моя локальная сеть; 192.168.112.0/24 локальная сеть удаленного офиса; y.y.y.y мой белый ip, а x.x.x.x белый ip удаленного офиса (динамический).
Настройки Микротик сервера:
Политки:
И как результат трафик в обратную сторону идет через туннель с номером 0, а не через динамически созданный при подключении клиента. Для себя решил эту проблему путем использования ddns записи у удаленных клиентов и определения их ip c подстановкой в соответствующую политику. DDNS на удаленных роутерах у меня был уже настроен.
Вот скрипт который достает из дднс имени удаленного пира ip адрес и вставляет его в нужную политику. Так как политик для разных сетей уже не сколько тот добавляем для каждой политики комментарий, по которому будем определять нужную.
И добавляем выполнение данного скрипта в планировщик:
Если использовать в качестве роутеров в удаленных офисах Микротики то полезными будет пара скриптов.
Скрипт, который подставляет на удаленной стороне текущий ip в политику:
Как на микротике обновлять No-ip.com сервис описано тут: wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_No-IP_DNS
Но для начала немного вводных данных.
Дано 192.168.0.0/21 моя локальная сеть; 192.168.112.0/24 локальная сеть удаленного офиса; y.y.y.y мой белый ip, а x.x.x.x белый ip удаленного офиса (динамический).
Настройки Микротик сервера:
/ip ipsec peer
address.0.0.0/0 port=500 auth-methodre-shared-key secret="12345678"
generate-policy=no exchange-mode=main send-initial-contact=yes
nat-traversal=no my-id-user-fqdn="" proposal-checkbey
hash-algorithm=sha1 enc-algorithm=3des dh-group=modp768 lifetime=1d
lifebytes dpd-interval=2m dpd-maximum-failures=5
Политки:
/ip ipsec policy
src-address=192.168.0.0/21 src-port=any dst-address=192.168.112.0/24 dst-port=any protocol=all action=encrypt level=require ipsec-protocols=esp tunnel=yes sa-src-address=y.y.y.y sa-dst-address=0.0.0.0 comment=pobug
</code>
В результате подымается туннель с той стороны и вижу 3 installed-sa:
<source>
0 E spi src-address=y.y.y.y dst-address=0.0.0.0 auth-algorithm=none
enc-algorithm=none replay state=larval add-lifetimes/30s
1 E spi=0x2010010 src-address=y.y.y.y dst-address=z.z.z.z
auth-algorithm=sha1 enc-algorithm=3des replay=4 state=mature
auth-key="sss"
enc-key="fff"
addtime=jun/10/2013 12:42:47 expires-in=7h41m33s add-lifetime=6h24m/8h
current-bytes=240
2 E spixDBEA2D2 src-address=z.z.z.z dst-address=y.y.y.y
auth-algorithm=sha1 enc-algorithm=3des replay=4 state=mature
auth-key="sss"
enc-key="fff"
addtime=jun/10/2013 12:42:47 expires-in=7h41m33s add-lifetime=6h24m/8h
current-bytes=3376
И как результат трафик в обратную сторону идет через туннель с номером 0, а не через динамически созданный при подключении клиента. Для себя решил эту проблему путем использования ddns записи у удаленных клиентов и определения их ip c подстановкой в соответствующую политику. DDNS на удаленных роутерах у меня был уже настроен.
Вот скрипт который достает из дднс имени удаленного пира ip адрес и вставляет его в нужную политику. Так как политик для разных сетей уже не сколько тот добавляем для каждой политики комментарий, по которому будем определять нужную.
:local nname pobug;
:log info "start $nname";
:local newip [:resolve "lanlan69.zapto.org"];
:local curip [/ip ipsec policy get [/ip ipsec policy find comment=$nname] sa-dst-address];
:log info "newip = $newip";
:log info "currentip = $curip";
:if ($newip != $curip) do={
:log info "ip $nname is $curip not $newip";
/ip ipsec policy set [/ip ipsec policy find comment=$nname] sa-dst-address=$newip;
:log info "end $nname";
}
И добавляем выполнение данного скрипта в планировщик:
/system scheduler
add disabled=no interval=7m name=pobug on-event=lan112 policy= read,write,policy,test,sensitivei start-date=jun/12/2013 start-time=08:11:19
Если использовать в качестве роутеров в удаленных офисах Микротики то полезными будет пара скриптов.
Скрипт, который подставляет на удаленной стороне текущий ip в политику:
:global lastip
:local wanip
:local wanif "pppoe-out1"
:if ([ :typeof $lastip ] = nil ) do={ :global lastip "0" }
:local wanip [ /ip address get [/ip address find interface=$wanif ] address ]
:if ([ :typeof $wanip ] = nil ) do={
:log info ("WANIP: no ip address on $wanif .")
} else= {
:for i from=( [:len $wanip] - 1) to=0 do={
:if ( [:pick $wanip $i] = "/") do={
:set wanip [:pick $wanip 0 $i];
:log info ("wan ip now is $wanip")
}
}
:if ($wanip != $lastip) do={
:log info ("Renew ipsec Policy: $wanif -> $wanip")
#Подставляем в политику ipsec
/ip ipsec policy set 0 sa-src-address=$wanip
:global lastip $wanip
}
}
Как на микротике обновлять No-ip.com сервис описано тут: wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_No-IP_DNS
Комментарии (7)
strelokr
21.09.2015 17:23Dlink 804 не имеет pptp клиента, только сервер. Mikrotik внедрялся постепенно и этот костыль был для поддержания «исторически сложившейся» конфигурации
V0ldemar
21.09.2015 18:15В свое время занимался создание чего-то подобного, но забросил.
Полезная статься, спасибо!
ifaustrue
А в чём профит использовать туннельный IPSec по сравнении с любым PPP туннелем + IPSec транспорт?