Возникла задача — провайдер выдал целую подсеть белых адресов. Необходимо за 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 реальная сеть ? :)
Спасибо Виталику, за то что копался в интернете и то же пытался разрешить эту проблему (пусть и странным способом ;) ).
Комментарии
не совсем понял вопрос. делаем маркированные роуты с адресами шлюзов провайдеров.
попытался настроить по статье - не получилось
Естественно, в нат-правилах добавленное переставил в самое начало.
Захожу на адрес-порты снаружи, счётчики в микротики тикают - то есть правила-то работают, Но вот клиент ответа не получает.
Посмотрел через internet.ya.ru обратку с (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
- это продолжение, а то длинные комментарии не лезут :(
Не срастается чего-то.
Есть настроенная сеть, с микротиком в ней под адресом .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
если у вас нет vpn с другими офисами, это не нужно. а вот если есть vpn то просто dst-address=0.0 .0.0/0 не пройдет. он будет пытаться натить пакетики в впн. тут два варианта, либо описывать перед натом каждую подсеть филиала, либо запретить натить этот диапазон. либо (еще удобней) создать список локальных сетей.
/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, и они пойдут по динамическим маршрутам.
Спасибо за замечание по заголовку - исправил.
что касается dst-address=!19 2.168.0.0/16. Если локальная сетка одна, то это не актуально,
т.к. к гейту пойдут обращения если не найдено в локалке.
Если у нас внутри несколько несколько сетей и они форвардятся через микротик или подняты впн лан-то-лан, то тут лучше использовать великую вещь - адрес-листы. Список локальных сетей которые не натятся.
С Горячим админским Приветом!
Я
/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
тогда все запросы для локальной сети будут курсировать только внутри локалки и не будут выходить за пределы дозволенного.
RSS лента комментариев этой записи