MikroTik NAT через VPN

Очень часто нас спрашивают, примерно такой вопрос.

«У нас есть два филиала, и мы хотим предоставить доступ к внутренним ресурсам второго филиала, через публичный адрес первого филиала»

Для того чтобы понять, какой кейс мы будем решать, необходима схема и её некоторое описание.

MikroTik MultiWan by vasilev kirill

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

Если у вас только один “белый” IP адрес, то в этом случае вы ограниченны в выборе типа VPN соединения, вам потребуется выбирать из клиент-серверной реализации.

Опишем задачу, в сети R1 есть веб сервер с адресом 192.168.1.100 при попытках внешнего клиента установить соединение с сервером через маршрутизатор R1, он должен успешно установить соединение.Точно также если клиент попытается установить соединение с данным сервером через маршрутизатор R2, он должен сделать это также успешно.

В сети маршрутизатора R2 есть сервис SMTP 25 порт TCP с адресом 192.168.2.25, точно также, как и веб сервис, он должен быть доступен через оба маршрутизатора.

Давайте настроим первым делом маршрутизаторы, то, как вы это делаете обычно.

На R1

/system identity set name=R1
/ip address add interface=ether1 address=1.1.1.2/30
/ip address add interface=ether2 address=192.168.1.1/24

На R2

/system identity set name=R2
/ip address add interface=ether1 address=2.2.2.2/30
/ip address add interface=ether2 address=192.168.2.1/24

Мы не будем учитывать настройку фильтра firewall, это требует отдельной большой статьи, а то и курса, как минимум MTCNA.Я надеюсь, вы знаете, как надо настраивать firewall MikroTik.

Также нам необходимо настроить NAT.Настраиваем, как обычно, без каких либо излишеств.

На R1

/ip firewall nat 
add in-interface=ether1 protocol=tcp dst-port=80,443 action=dst-nat to-address=192.168.1.100
add in-interface=ether1 protocol=tcp dst-port=25 action=dst-nat to-address=192.168.2.25 

На R2

/ip firewall nat 
add in-interface=ether1 protocol=tcp dst-port=80,443 action=dst-nat to-address=192.168.1.100
add in-interface=ether1 protocol=tcp dst-port=25 action=dst-nat to-address=192.168.2.25

src-nat не привел в примере, так как он может быть у вас разный, его отсутствие не будет сказываться на сетевую доступность сервисов.Вы должны самостоятельно сделать правило, как минимум masquerade.

Обратите внимание, что dst-nat у нас правила на обоих маршрутизаторах одинаковые, можно добавить ещё в фильтр dst-address, но тут всё зависит от конкретной реализации.

VPN

Конечно, нам необходимо настроить VPN, без какой-либо излишек без шифрования и прочего, вы сами должны определить для себя какой тип инкапсуляции и нужно ли вам шифрование.Возможно, что вы у провайдера берёте услугу L2VPN, то тогда у вас есть отдельный интерфейс, возможно в виде VLAN.

Создадим самый простой VPN на основе IP инкапсуляции.

На R1

/interface ipip add local-address=1.1.1.2 remote-address=2.2.2.2 name=R1-to-R2
/ip address add interface=R1-to-R2 address=172.16.31.1/30

На R2

/interface ipip add local-address=2.2.2.2 remote-address=1.1.1.2 name=R1-to-R2
/ip address add interface=R1-to-R2 address=172.16.31.2/30

Для удобства используем одинаковые имена интерфейсов.

Создали туннель и назначили на него IP адрес с сетью /30.

После всего прочего, нам необходимо настроить маршрутизацию, чтобы хосты разных сетей были доступны.Т.е.обеспечиваем IP связность.

На R1

/ip route add dst-addres=192.168.2.0/24 gateway=172.16.31.2

На R2

/ip route add dst-addres=192.168.1.0/24 gateway=172.16.31.1

На данный момент у вас должно заработать связность и хосты должны быть доступны по IP адресам.

И даже доступны сервисы находящиеся непосредственно в connected сетях маршрутизаторов, но только не сервисы, которые идут через dst-nat в другой филиал.

Прежде что-либо настроить нам надо разобраться почему не работать текущая схема.

MikroTik MultiWan by vasilev kirill

Самая главная причина, в том, что когда от сервера приходит пакет в ответ на существующее соединение.Маршрутизатора R2 отправляет пакет через себя в интернет, а нам необходимо, чтобы он его доставил на R1.Также R2 отправляет его «в чём мать родила», без подмены адреса источника.Хотя подмена и не нужна, но в такой ситуации вы компрометируете свою внутреннюю сеть, как минимум перед провайдером.

Что делать?

Нам необходимо заставить маршрутизатор R2 отправить такие пакеты обратно в VPN на R1.А так как у нас зеркальная ситуация, то же самое будет происходить и на R1.Нам необходимо внести настройки на оба маршрутизатора.

Первым делом нам необходимо промаркировать все соединения, который поступают с VPN туннеля, но будет не все подряд, а только new, и только с адресов интернета.Так как скорее всего в этом VPN соединении проходит трафик между внутренними сетями, а нам необходимо строго определить тот трафик который приходить из интернета.

На R1

/ip firewall mangle 
add chain=prerouting in-interface=R1-to-R2 connection-state=new src-address-list=!BOGON action=mark-connection new-connection-mark=R1-to-R2

На R2

/ip firewall mangle 
add chain=prerouting in-interface=R1-to-R2 connection-state=new src-address-list=!BOGON action=mark-connection new-connection-mark=R1-to-R2

Я не буду в двадцатый раз, рассказать о том, что такое BOGON адреса, вы можете прочитать в нашем блоге много информации об этих адресах.Теперь, у нас все соединения который были противоположенным маршрутизатор перенаправлены через VPN c помощью dst-nat имеют имя R1-to-R2.

Далее нам необходимо всего лишь перенаправить весь трафик из локальной сети, в данном соединении обратно в VPN.

На R1

/ip firewall mangle 
add chain=prerouting in-interface=!R1-to-R2 connection-mark=R1-to-R2 action=mark-routing new-routing-mark=R1-to-R2

На R2

/ip firewall mangle 
add chain=prerouting in-interface=!R1-to-R2 connection-mark=R1-to-R2 action=mark-routing new-routing-mark=R1-to-R2

И последний манёвр нам необходимо создать именованную таблицу маршрутизации, которая бы отправляла трафик на противоположенный маршрутизатор.

На R1

/ip route
add gateway=172.16.31.2 routing-mark=R1-to-R2
/ip route rule
add action=lookup-only-in-table routing-mark=R1-to-R2 table=R1-to-R2

На R2

/ip route
add gateway=172.16.31.1 routing-mark=R1-to-R2
/ip route rule
add action=lookup-only-in-table routing-mark=R1-to-R2 table=R1-to-R2

И собственно всё, неважно какой у вас тип туннеля, хоть витая пара, хоть оптика или L2VPN от провайдера, главное чтобы на интерфейсе была адресация.

Поделиться

Обсуждение