Динамическое добавление и удаление статических маршрутов в VPN
Добавлено: 14 дек 2018, 12:12
Допустим у нас есть связка Микротиков PPTP-сервер - PPTP-клиент.
За обоими маршрутизаторами стоят сети. Чтобы они были видны клиентам с обоих сторон мы, как известно, должны прописать маршруты в обе стороны (ну или в какую хотим) или использовать OSPF.
При простых связях с небольшим количеством роутеров, я не использую OSPF, но при отсутствии активного VPN-соединения микротиков и статические маршруты, всё время присутствующие в /root, раздражают.
Можно сделать следующее:
1. Чтобы добавить "динамический" путь (-ти) в подсеть (-ети) pptp-клиента на Микротике-сервере мы идем во вкладку ppp-secret и добавляем в пункт Rootes следующее: адрес клиента (сети) шлюз (адрес pptp-клиента) дистанция (данные параметры вставляются через пробел)
Например: 192.168.85.0/24 10.10.16.2 1
При этом при установлении соединения между Микротиками клиентом и сервером в /rootes сервера будет добавлен путь к сети Микротика-клиента 192.168.85.0/24 через шлюз 10.10.16.2 (это в данном случае адрес нашего pptp-клиента в VPN-тоннеле) с дистанцией 1.
Можно добавлять пути к нескольким сетям с разными дистанциями, это делается через запятую, например:
192.168.88.0/24 10.10.10.2 1, 192.168.89.0/24 10.10.10.2 2, 192.168.90.0/24 10.10.10.2 2
Важно, что в таком случае, пути в эти сети добавляются при установлении VPN-соединения и "пропадают" при его разрыве. То есть статические маршруты становятся как бы "динамическими" и не захламляют /rootes.
* Однако таким образом добавлять маркированные маргруты нельзя. Если это необходимо со стороны VPN-сервера, то следует делать это через profiles, как показано для клиента (ниже).
**То же самое можно сделать на Микротике-сервере через profile scripts, как делается ниже для Микротика-клиента, но предложенное выше проще и работает само.
2. Теперь нужно добавить пути в подсети Микротика-сервера на Микротике-клиенте. Как это сделать ? Ведь pptp-secret на клиенте нет.
На помощь приходит пункт PPP-profile на Микротике-клиенте, точнее его вкладка Scripts:
Здесь в событие "UP" мы вставляем добавление пути в нужную нам сеть Микротика-сервера, например:
/ip route add dst-address=192.168.0.0/24 gateway=10.10.12.1 distance=1 check-gateway=ping scope=255 comment="Root in net Mikrotik server VPN",
(заметьте, что шлюзом тут выступает адрес Микротика-сервера в VPN-тоннеле),
а в событие "Down" - удаление этого пути (точнее даже всех путей с комментарием "Root in net Mikrotik server VPN":
foreach i in [/ip route find where comment="Root in net Mikrotik server VPN"] do={[/ip route remove $i]}
т.к. при разрыве VPN-соединения добавленный через script profiles маршрут сам не удаляется. Можно точно также добавлять/удалять маркированные маршруты.
Разумеется, в этих скриптах комментарий может быть любой (Ваш), но, он должен быть одинаковый, иначе пути не удалятся.
Таким образом, Вы также можете добавлять несколько подсетей в маршруты на сети Микротика-сервера и удалять их все после отключения VPN-соединения (как сделано в данном цикле foreach).
Это решение позволяет без технологии OSPF при установлении VPN-соединений добавлять автоматически маршруты на нужные сети в обе стороны и автоматически удалять их при отключении VPN (т.е. статические маршруты становятся как бы "динамическими").
Работает также и при L2TP и при openVPN, настройка абсолютно аналогична.
За обоими маршрутизаторами стоят сети. Чтобы они были видны клиентам с обоих сторон мы, как известно, должны прописать маршруты в обе стороны (ну или в какую хотим) или использовать OSPF.
При простых связях с небольшим количеством роутеров, я не использую OSPF, но при отсутствии активного VPN-соединения микротиков и статические маршруты, всё время присутствующие в /root, раздражают.
Можно сделать следующее:
1. Чтобы добавить "динамический" путь (-ти) в подсеть (-ети) pptp-клиента на Микротике-сервере мы идем во вкладку ppp-secret и добавляем в пункт Rootes следующее: адрес клиента (сети) шлюз (адрес pptp-клиента) дистанция (данные параметры вставляются через пробел)
Например: 192.168.85.0/24 10.10.16.2 1
При этом при установлении соединения между Микротиками клиентом и сервером в /rootes сервера будет добавлен путь к сети Микротика-клиента 192.168.85.0/24 через шлюз 10.10.16.2 (это в данном случае адрес нашего pptp-клиента в VPN-тоннеле) с дистанцией 1.
Можно добавлять пути к нескольким сетям с разными дистанциями, это делается через запятую, например:
192.168.88.0/24 10.10.10.2 1, 192.168.89.0/24 10.10.10.2 2, 192.168.90.0/24 10.10.10.2 2
Важно, что в таком случае, пути в эти сети добавляются при установлении VPN-соединения и "пропадают" при его разрыве. То есть статические маршруты становятся как бы "динамическими" и не захламляют /rootes.
* Однако таким образом добавлять маркированные маргруты нельзя. Если это необходимо со стороны VPN-сервера, то следует делать это через profiles, как показано для клиента (ниже).
**То же самое можно сделать на Микротике-сервере через profile scripts, как делается ниже для Микротика-клиента, но предложенное выше проще и работает само.
2. Теперь нужно добавить пути в подсети Микротика-сервера на Микротике-клиенте. Как это сделать ? Ведь pptp-secret на клиенте нет.
На помощь приходит пункт PPP-profile на Микротике-клиенте, точнее его вкладка Scripts:
Здесь в событие "UP" мы вставляем добавление пути в нужную нам сеть Микротика-сервера, например:
/ip route add dst-address=192.168.0.0/24 gateway=10.10.12.1 distance=1 check-gateway=ping scope=255 comment="Root in net Mikrotik server VPN",
(заметьте, что шлюзом тут выступает адрес Микротика-сервера в VPN-тоннеле),
а в событие "Down" - удаление этого пути (точнее даже всех путей с комментарием "Root in net Mikrotik server VPN":
foreach i in [/ip route find where comment="Root in net Mikrotik server VPN"] do={[/ip route remove $i]}
т.к. при разрыве VPN-соединения добавленный через script profiles маршрут сам не удаляется. Можно точно также добавлять/удалять маркированные маршруты.
Разумеется, в этих скриптах комментарий может быть любой (Ваш), но, он должен быть одинаковый, иначе пути не удалятся.
Таким образом, Вы также можете добавлять несколько подсетей в маршруты на сети Микротика-сервера и удалять их все после отключения VPN-соединения (как сделано в данном цикле foreach).
Это решение позволяет без технологии OSPF при установлении VPN-соединений добавлять автоматически маршруты на нужные сети в обе стороны и автоматически удалять их при отключении VPN (т.е. статические маршруты становятся как бы "динамическими").
Работает также и при L2TP и при openVPN, настройка абсолютно аналогична.