Здравствуйте! Подскажите пожалуйста, у меня не получается направить пакеты исходящие из localhost.
Конфигурация:
FREEBSD-7.1
PF
ng0 – внешний интерфейс с ограниченным каналом и реальным IP
gw_ng0-шлюз для ng0vlan5-10.8.37.4 внешний интерфейс с дешевым трафиком и IP под NAT провайдера,
gw_vlan5 – шлюз 10.8.37.1по умолчанию маршрутизация настроена на дешевый канал vlan5.
Хочу сделать, чтобы запросы на отправку/прием почты, и WEB инициализированными самим маршрутизатором шли через канал с реальным IP ng0,
Пример:
Отправить пакеты через интерфейс ng0, приходящие на физический интерфейс re0:
<code>
pass in on re0 route-to (ng0 $gw_ng0) proto {tcp, udp} from any to any port {80, 25} flags S/SA keep state
</code>
Данное правило работает, т.к. пакеты идут от ВНЕШНЕЙ машины на интерфейс re0.Теперь пробую написать правило для пакетов исходящих от Localhost
т.к. путь по умолчанию настроен на gw_vlan5 ловлю их на vlan5
<code>
pass OUT on vlan5 route-to (ng0 $gw_ng0) proto {tcp, udp} from any to any port {80, 25} flags S/SA keep state
</code>
не работает:
<code>
#tcpdump -nettti pflog0
tcpdump: WARNING: pflog0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pflog0, link-type PFLOG (OpenBSD pflog file), capture size 96 bytes
000000 rule 2/0(match): pass out on vlan5: 10.8.37.4.62764 > 62.152.59.5.80: tcp 40 [bad hdr length 0 - too short, < 20]
где 62.152.59.5 сайт ip-ping.ru
</code>Похожую проблему нашел в статье
http://lists.freebsd.org/pipermail/freebsd-net/2007-July/014...
как я понял, эту проблему пытались решить с указанием маршрута по умолчанию на некий виртуальный интерфейс, и затем его там ловить, но не совсем понял как это сделать.
привет!лениво разбираться...
http://wiki.zeynalov.com/vagif:docs:freebsd:pf#load_balancin...- посмотри, тут есть мои живые конфиги.
Я тут пытался раскидывать трафик между stream & corbina.
причем corbina - было по умолчаниюкак выяснилось, некоторые сайты не любят, когда для одной и той же сессии пакеты приходят с разных IP. И icq оказалась в том же числе. Поэтому некоторые адреса я явно загнал в какие-то каналы статически.
>http://wiki.zeynalov.com/vagif:docs:freebsd:pf#load_balancin...- посмотри, тут есть мои >живые конфиги.есля я правильно понял из конфигоф указанных на указанном сайте
pass in quick on $int_if route-to { ($ext_if2 $ext_gw2) } proto { tcp } from any to $icq keep state
pass in quick on $int_if route-to { ($corbina_if $corbina_gw) } proto { tcp, udp } from any to $corbina keep state
то $int_if это интерфейс к которому подключены пользователи/клиенты и если запрос придет от них на ip icq то он уйдет в ext_if2, если на ip corbina то уйдет на $corbina ;такое правило как я уже писал у меня работает, проблема заключается в том что, если запустить traceroute на клиенте подключенному к $int_if до ip ICQ и до IP corbina, то каждый уйдет по своему интефейсу, ! НО ! если сделать traceroute с сервера до ip icq, и до ip corbina то все они пойдут на шлюз по умолчанию, т.е. в corbina, можете проверить.
Хочу добавить вот еще что:
если написать
pass out log quick on vlan5 route-to (ng0 $gw_ng0) proto icmp from any to any keep state
и сделать ping -c 5 77.88.21.8то
[root@julman /etc]# tcpdump -i ng0 host 77.88.21.8
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ng0, link-type NULL (BSD loopback), capture size 96 bytes
17:06:10.829710 IP 94.102.53.85 > ya.ru: ICMP echo request, id 18806, seq 0, length 64
17:06:10.980776 IP ya.ru > 94.102.53.85: ICMP echo reply, id 18806, seq 0, length 64
17:06:11.830409 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 1, length 64
17:06:12.831183 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 2, length 64
17:06:13.831959 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 3, length 64
17:06:14.832765 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 4, length 64т.е. пакеты заворачиваются на ng0 но ПИНГ не проходит,
tcpdump -i vlan5 host 77.88.21.8
пакетов ни входящих ни исходящих не регистрирует
>том что, если запустить traceroute на клиенте подключенному к $int_if до
>ip ICQ и до IP corbina, то каждый уйдет по своему
>интефейсу, ! НО ! если сделать traceroute с сервера до ip
>icq, и до ip corbina то все они пойдут на шлюз
>по умолчанию, т.е. в corbina, можете проверить.честно скажу, icmp пакетами не заморачивался...
но все это выглядит вполне логично, ведь правила навешиваются только на интерфейс пользователей ($int_if), а на сервере эти правила не работают.
>честно скажу, icmp пакетами не заморачивался...
>но все это выглядит вполне логично, ведь правила навешиваются только на интерфейс
>пользователей ($int_if), а на сервере эти правила не работают.В том то и дело что берем работающее правило для клиентского интерфейса меняем на нужный (vlan5) и направление на out , и не работает!
Обгуглив весь интернет нашел в mail archive, то что мне нужно называлось Port-Based-Routinghttp://www.mail-archive.com/misc@openbsd.org/msg36355.html
смысл таков
$ext_sainf - шлюз по умолчанию, куда идут все пакеты.
$ext_kiev - интерфейс через который следует выпустить пакет.
$gw_kiev - шлюз для $ext_kievnat on $ext_sainf proto {tcp,udp} from self to any port smtp tag IF2 -> ($ext_kiev)
pass out log quick on $ext_sainf route-to ($ext_kiev $gw_kiev) tagged IF2 keep stateвот эти два правила решают поставленную задачу.
>Обгуглив весь интернет нашел в mail archive, то что мне нужно называлось
>Port-Based-Routingкстати, новая FreeBSD 8 поддерживает на уровне ядра несколько роутинговых таблиц.
+ стала более продвинутая поддержка jail, со своим роутингом, nat'ом, fw, и т.д.вот только руки все не доходят поковыряться...