hsvt Опубликовано 26 декабря, 2013 (изменено) · Жалоба Уже много раз где обсуждалось, но всё же проблему решить не могу. uname -a FreeBSD gw1 9.1-RELEASE FreeBSD 9.1-RELEASE #7: Tue Mar 19 20:08:57 MSK 2013 root@gw1:/usr/obj/usr/src/sys/GWKERNEL amd64 igb0 - во внешку с реальниками для nat (подняты alias ip's) x.x.x.x/22 igb1 - внутренний интерфейс 192.168.253.252/24 (локалка) vlans_igb1="123" - один из сегментов ifconfig_igb1_123="inet 192.168.123.252/24" - шлюз который прописывает у себя пользователь на компьютере. pf: ext_if = "igb0" int_if = "igb1" # NAT & RDR no nat inet from any to <no_nat> (в таблице no_nat наши локальные сети) nat pass on $ext_if inet from 192.168.123.213 to any -> x.x.x.x rdr pass on $ext_if inet from any to x.x.x.x -> 192.168.123.213 Фильтрации для x.x.x.x не используется т.к. это белые ипы клиентов которые выходят во внешку за nat. Я нахожусь в этой же сети (192.168.123.0/24) прописываю у себя 192.168.123.213/24 и шлюз 192.168.123.252. Меня пускает во внешку под x.x.x.x - всё отлично всё работает, если я открываю какие то сервисы во вне - редирект так же работает. С внешки порты открыты которые нужны. При заходе с локалки на x.x.x.x (не важно по IP или доменному имени если это сайт) tcp коннекта нету. А заходить так уже очень нужно было бы. В iptables такое работает с помощью двух правил: -A PREROUTING -d x.x.x.x/32 -j DNAT --to-destination 192.168.123.213 -A POSTROUTING -s 192.168.123.213/32 -j SNAT --to-source x.x.x.x Всё же часто необходимо для клиентов в локальной сети соединяться на внутренний сервер, как внешние клиенты и делать это прозрачно. Существует несколько решений этой проблемы Я читал faq pf redirect, но простветления не приходит :) единственное что получалось сделать это доп. правило нат на внутреннем интерфейсе т.е. в итоге я заходил из локалки на x.x.x.x, например на 80 порт, НО под ip шлюза т.е. 192.168.123.252. Это так же не устраивает, хотелось бы идти под своим локальным. Кто что подскажет как реализовать данное требование? Так же еще скомпилен ipfw + dummynet для шейпинга. Изменено 26 декабря, 2013 пользователем hsvt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 26 декабря, 2013 · Жалоба единственное что получалось сделать это доп. правило нат на внутреннем интерфейсе т.е. в итоге я заходил из локалки на x.x.x.x, например на 80 порт, НО под ip шлюза т.е. 192.168.123.252. Это так же не устраивает, хотелось бы идти под своим локальным. Кто что подскажет как реализовать данное требование? Взаимо исключающие хотелки. Воспользуйтесь tcpdump чтобы осознать. Когда вы с локалки идёте на хххх, пф честно пересылает ваш пакет с локальным ип на 123.213, но 123.213 будет отвечать ВАМ(!) потому что там обратный адрес ВАШ(!), а ваш хост ждёт ответа от адреса хххх, соответственно пакет с ответом от 123.213 будет отброшен как не прошенный. Вам именно нужно делать двойной нат (срц и дст) на роутере и видеть вы будете на 123.213 ип сервера. Есть ещё варианты с icmp редиректами, вроде, но я такое не проверял и не могу ничего сказать. Ещё, в теории, можно арпами анонсить хххх в локалку = прописать на 123.213 адрес хххх, в теории тоже может сработать. И в линухе у вас тоже двойной нат и 123.213 видит ип сервера. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hsvt Опубликовано 26 декабря, 2013 (изменено) · Жалоба Проверил как работает в линухе, только что еще раз стенд собрал: два компа, на первом прописан адрес 192.168.123.214/24 gw 192.168.123.253, на втором 192.168.123.215/24 gw 192.168.123.253. В iptables оба ipa сначены как писал выше, на белые ипы реальники. На 192.168.123.215 я поднимаю 80 порт и захожу с 192.168.123.214 на x.x.x.x (белый ип ip 123.215 на который натиться) и в логах веб сервера мне показывает мой внешний ип белый, реальник соотвественно на который сначен 123.215. (да это не локальный ip, но хотя бы внешний и видно кто это, т.е. это не общий ip сервера) И так работает уже у нас давно, а вот на фряхе что-то не получается такого добиться. Трацерт с 123.215 на x.x.x.x(123.214): 1. x.x.x.x 2. x.x.x.x Два раза реальник один и тот же, алияс на линухе повешен так: (т.е. этот ип сервера я и вижу) ip a | grep x.x.x.x inet x.x.x.x/24 brd x.x.x.x.255 scope global secondary vlan600 Я понимаю может быть на линухе сделано не правильно и криво, но всё же для клиентов оно работает как надо т.е. они могут стучаться в локалке друг к другу по внешним адресам и использовать web, 1c, rdp, etc. Изменено 26 декабря, 2013 пользователем hsvt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vlad11 Опубликовано 26 декабря, 2013 · Жалоба Господа, вы же технические специалисты, прикладывайте понятную графическую схему. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hsvt Опубликовано 27 декабря, 2013 (изменено) · Жалоба Господа, вы же технические специалисты, прикладывайте понятную графическую схему. И так стараюсь максимально подробно описать все нюансы и проблему, графическая схема здесь на мой взгляд не пригодна, мы же не топологию выбираем щас. Вам именно нужно делать двойной нат (срц и дст) на роутере и видеть вы будете на 123.213 ип сервера. Подскажите тогда пожалуйста правила? Пробовал вот так: nat pass on $ext_if inet from 192.168.123.213 to any -> x.x.x.x rdr pass on $ext_if inet from any to x.x.x.x -> 192.168.123.213 nat pass on igb1.123 inet from igb1.123:network to 192.168.123.213 -> igb1.123 no nat on igb1.123 proto tcp from igb1.123 to igb1.123:network rdr pass on igb1.123 inet from igb1.123:network to x.x.x.x -> 192.168.123.213 Тогда клиенты ходят на внешние адреса под igb1.123 (под шлюзом сервера как вы и говорили)Но это тоже не совсем подходит. Как я писал выше, на линухе будет виден реальник клиента, причем уникальный для каждого. К тому же чтобы работали правила выше приходится убирать правило no nat. no nat inet from any to <no_nat> В таблице no_nat собраны наши локальные сети. Про анонсы арпов это смотреть в сторону proxy arp вы имеете в виду ? Или вы про статические arp записи. Так же я поднял bind и прописал локальную днс зону. ftp IN A 192.168.123.213 mail IN A 192.168.123.213 ns1 IN A 192.168.123.213 ns2 IN A 192.168.123.213 pop IN A 192.168.123.213 smtp IN A 192.168.123.213 www IN A 192.168.123.213 Тогда все конекты работают и резолвится домен на локальный адрес, но работает только по доменному имени. Опять же если мне надо постучаться напрямую на реальник на конкретный порт приложения - этого не произойдёт. Где найти тут золотую середину и как лучше сделать? Изменено 27 декабря, 2013 пользователем hsvt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ivan_83 Опубликовано 27 декабря, 2013 · Жалоба Я вам уже писал как пакеты ходят и почему не работает. Не может оно просто работать, тк пакеты в итоге ходят с разными адресами и разными путями. Есть ещё вариант перетащить сервер в другую подсеть, тогда пакеты через фрю будут роутится для локальных клиентов. Поднятие алиаса на сервере 123.213 не поможет. Почему в линуксе работает и как - изучите сами и нам расскажите. http://www.netlab.linkpc.net/forum/index.php?topic=645.0 тут описание двойной трансляции. Делалось это немного для другого случая, но здесь так же применимо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...