База знаний

www. IT-Mehanika .ru --  журнал доброго админа

Микротик - несколько белых IP на одном WAN, проброс портов и разделением исходящих IP

Возникла задача — провайдер выдал целую подсеть белых адресов. Необходимо за NAT разместить сервера с различными сервисами и пробросить к ним порты. И не просто пробросить, а что бы за каждым сервером был жестко закреплен свой IP как на входящие, так и на исходящие соединения. В качестве демонстрации будем считать сеть провайдера (чих-пых-связь) 10.0.0.0/24 с гейтом 10.0.0.1 и локальную сеть 192.168.1.0/24 гейт , сами понимаете, 192.168.1.1 . Назначаем адреса :

/ip address

add address=10.0.0.2/27 comment=ChihPihNet interface=ether10

add address=10.0.0.3/27 comment=ChihPihNet interface=ether10

add address=10.0.0.4/27 comment=ChihPihNet interface=ether10

add address=192.168.1.1/24 interface=ether1 network=192.168.1.0

 

 

 

пишем роутинг к шлюзу провайдера :

/ip route

add check-gateway=ping distance=1 gateway=10.0.0.1

 

и в NAT добавим «что бы все» :)

/ip firewall nat

add action=masquerade chain=srcnat out-interface=ether10 src-address=\

192.168.1.0/24 src-address-list=""

 

Проброс из интернета на сервера, делается тоже достаточно просто. Вот пример проброса порта 80 к веб-серверу и 25 к почтовому :

/ip firewall nat

add action=dst-nat chain=dstnat comment="to web server 192.168.1.25" dst-address=\

10.0.0.3 dst-port=80 protocol=tcp to-addresses=192.168.1.25

add action=dst-nat chain=dstnat comment="to smtp server 192.168.1.35" dst-address=\

10.0.0.4 dst-port=25 protocol=tcp to-addresses=192.168.1.35

Но тут мы первый раз получаем граблями в лоб. Все к нам приходит. Но если веб или почта начинают отвечать — они лезут в интернет от самого первого адреса — 10.0.0.2 . В ряде случаев это критично. Например для почты . Если сервер почты в DNS значится на адресе 10.0.0.3, а лезет с 10.0.0.2, большая вероятность влететь в спам-лист или просто в игнор. Значит надо добиться что бы просто пользователи перли в интернет от адреса 10.0.0.2 , а сервера с тех же адресов с которых к ним пробрасывалось. Перерыв за 2 дня кучу ссылок и форумов по Микротику в интернете, ответы сводились - «Не умеет микротик этого.
Как сказано выше только проброс с внешнего адреса на внутренний, одна большая проблема».

Но если ряд менее мощных роутеров это позволяет, ну неужели нет решений? Есть оно. Достаточно компактное.
Надо отмаркировать в таблице MANGLE исходящие от серверов :

/ip firewall mangle

add action=mark-routing chain=prerouting new-routing-mark=chihpih_4_r \ src-address=192.168.1.35

add action=mark-routing chain=prerouting new-routing-mark=chihpih_3_r \ src-address=192.168.1.25

 

Внимание! Чтобы еще раз не получить граблями между глаз, помните нижеуказанные правила в нат, должны быть ПЕРЕД дефаултным!!! Иначе до них просто не дойдет.

/ip firewall nat

add action=src-nat chain=srcnat dst-address=!192.168.0.0/16 out-interface=\

ether10 routing-mark= chihpih_3_r src-address=192.168.1.25 \

src-address-list="" to-addresses=10.0.0.3

add action=src-nat chain=srcnat dst-address=!192.168.0.0/16 out-interface=\

ether10 routing-mark= chihpih_4_r src-address=192.168.1.35 \

src-address-list="" to-addresses=10.0.0.4

Обратите внимание - используется не masquerade, а src-nat с нужным адресом внешнего интерфейса !!!

 

И теперь в роутах надо прописать :

 

/ip route

add check-gateway=ping distance=1 gateway=10.0.0.1 pref-src=\

10.0.0.3 routing-mark=chihpih_3_r

add check-gateway=ping distance=1 gateway=10.0.0.1 pref-src=\

10.0.0.4 routing-mark=chihpih_4_r

 

Теперь когда сервер хочет лезть в интернет, его маркируют и отправляют от заданного адреса по роутингу отличному от дефаулта. После всех настроек, можете проверить это зайдя на любой сайт с определением IP, что-то вроде internet.ya.ru . Надеюсь вы не подумали, что 10.0.0.0 реальная сеть ? :)

Спасибо Виталику, за то что копался в интернете и то же пытался разрешить эту проблему (пусть и странным способом ;) ).

 

Комментарии   

0 #25 mrbublik 11.02.2017 10:30
Цитирую Gavrila:
не совсем понятно как настроить, если 2 IP-шника провайдера из разных сетей, с разными шлюзами?
попытался настроить по статье - не получилось

не совсем понял вопрос. делаем маркированные роуты с адресами шлюзов провайдеров.
0 #24 Gavrila 11.02.2017 03:49
не совсем понятно как настроить, если 2 IP-шника провайдера из разных сетей, с разными шлюзами?
попытался настроить по статье - не получилось
0 #23 Георгий 18.11.2016 14:15
(второе продолжение)

Естественно, в нат-правилах добавленное переставил в самое начало.

Захожу на адрес-порты снаружи, счётчики в микротики тикают - то есть правила-то работают, Но вот клиент ответа не получает.

Посмотрел через internet.ya.ru обратку с (in _address)- а собственно да, она не измнилась. Там по-прежнему первый адрес провайдера.

Куда бы посмотреть - за что бы подёргать?
+1 #22 Георгий 18.11.2016 12:20
/ip firewall mangle add action=mark-rou ting chain=preroutin g new-routing-mar k=ProvSecond src-address=(in _address)

/ip firewall nat add action=src-nat chain=srcnat dst-address=!19 2.168.0.0/16 out-interface=e ther1 routing-mark=Pr ovSecond src-address=(in _address) to-addresses=(o ut_address2) comment="(out_a ddress2) for (in_address)"

/ip route add distance=1 check-gateway=p ing gateway=(gatewa y) pref-src=(out_a ddress2) routing-mark=Pr ovSecond

- это продолжение, а то длинные комментарии не лезут :(
0 #21 Георгий 18.11.2016 12:20
Добрый день!

Не срастается чего-то.

Есть настроенная сеть, с микротиком в ней под адресом .1

Есть ещё один адрес, который надо прицепить как входяще-исходящ ий для одного из внутренних хостов.

У меня получилось на добавление в конфиг микротика нижеследующие 6 строк:

/ip address add address=(out_ad dress2)/29 interface=ether 1 network=(networ k_address) comment=ProvSec ond

/ip firewall nat add action=netmap chain=dstnat comment="(out_a ddress2):443 for (in_address)" dst-address=(ou t_address2) dst-port=443 protocol=tcp to-addresses=(i n_address) to-ports=443
/ip firewall nat add action=netmap chain=dstnat comment="(out_a ddress2):8082 for (in_address)" dst-address=(ou t_address2) dst-port=8082 protocol=tcp to-addresses=(i n_address) to-ports=8082
+1 #20 mrbublik 20.10.2016 12:55
Цитирую wetman:
....
пункт dst-address=!192.168.0.0/16 не имеет смысла, ...

если у вас нет vpn с другими офисами, это не нужно. а вот если есть vpn то просто dst-address=0.0 .0.0/0 не пройдет. он будет пытаться натить пакетики в впн. тут два варианта, либо описывать перед натом каждую подсеть филиала, либо запретить натить этот диапазон. либо (еще удобней) создать список локальных сетей.
0 #19 wetman 20.10.2016 12:34
На мой взгляд в правиле

/ip firewall nat
add action=src-nat chain=srcnat dst-address=!19 2.168.0.0/16 out-interface=\
ether10 routing-mark= chihpih_3_r src-address=192 .168.1.25 \
src-address-list="" to-addresses=10.0.0.3

пункт dst-address=!19 2.168.0.0/16 не имеет смысла, так как это правило висит на ether10, а цепочка scr-nat срабатывает уже после маршрутизации. Пакеты с локальными адресами назначения сюда просто не доходят (а если дойдут, то все равно будут отброшены шлюзом).
Для маршрутизации пакетов между разными локалками достаточно исключить их адреса из маркировки в mangle prerouting, и они пойдут по динамическим маршрутам.
0 #18 mrbublik 07.07.2016 00:17
Цитирую Михаил:
в правило
/ip firewall nat

add action=masquerade chain=srcnat out-interface=ether10 src-address=\
192.168.1.0/24 src-address-list=""

добавить dst-address=!192.168.0.0/16
тогда все запросы для локальной сети будут курсировать только внутри локалки и не будут выходить за пределы дозволенного.


Спасибо за замечание по заголовку - исправил.
что касается dst-address=!19 2.168.0.0/16. Если локальная сетка одна, то это не актуально,
т.к. к гейту пойдут обращения если не найдено в локалке.
Если у нас внутри несколько несколько сетей и они форвардятся через микротик или подняты впн лан-то-лан, то тут лучше использовать великую вещь - адрес-листы. Список локальных сетей которые не натятся.
С Горячим админским Приветом!
Я
0 #17 Михаил 06.07.2016 20:56
в правило
/ip firewall nat

add action=masquera de chain=srcnat out-interface=e ther10 src-address=\
192.168.1.0/24 src-address-list=""

добавить dst-address=!192.168.0.0/16
тогда все запросы для локальной сети будут курсировать только внутри локалки и не будут выходить за пределы дозволенного.
0 #16 Михаил 06.07.2016 19:39
Не напутаны ли в тексте адреса и гейт - "сеть 192.168.1.0/24 гейт , сами понимаете, 192.168.0.1" - сеть одна, гейт из другой подсети. Непорядочек :)

You have no rights to post comments