Перенаправление локального трафика
-
Здравствуйте. Хочу перенаправить трафик, который будет исходить с самого сервера. Например 2.2.2.2 хочу перенаправить на 3.3.3.3. С транзитным проблем нет, в настройках nat создал соотвествующее правило. Но оно не распространяется на трафик исходящий с самой машины.
-
Добрый
@a7lan
Вы хотите пакеты ВНУТРИ сети редиректить? Пф рулит только трафиком уходящим ВОВНЕ. -
@werter не сосем. Я хочу например пакеты, отпралыяемые на некий локальный адрес (к примеру 192.168.200.200) перенаправлять на некий внешний (например 1.2.3.4). С транзитным трафиком проблем нет. Достаточно одно правило в перенаправление портов добавить и оно работает. Но вот с локальным такое не прокатывает, а нао как раз с локальным, которое генерируется самим шлюзом. Например если я делаю пинг до 192.168.200.200 то оно перенаправлялось на внешний адрес.
В linux с iptables я это делал очень просто. А тут пока не пойму как локальный вот так перенаправить.
-
Здр
а покажите , пож , как Вы это делали с iptables . Нужно увидеть принцип , тогда станет понятно , можно ли это реализовать с PF
-
@konstanti
Да там одно простое правило для таблицы nat
iptables -t nat -I OUTPUT -d 192.168.200.200 -j DNAT --to 1.2.3.4 -
@a7lan
так никто Вам не мешает создать такое же правило NAT Outbound на исходящем интерфейсе PF ( например , Lan )если я все верно понял
-
@konstanti
Если бы все так было просто) Я это уже пробовал. Во первых выбор LAN интерфейса вообще ничего не дает. Пакеты на 192.168.200.200 просто уходят с интернет интерфейса. Если же мы там укажем вместо LAN интернет интерфейс, то мы не назначение меняем, а адрес отправителя. На языке iptables мы не DNAT делаем, а SNAT.
В tcpdump это выглядит вот так14:10:28.019980 IP 4.2.2.2 > 192.168.200.200: ICMP echo request, id 35330, seq 0, length 64
вместо 1.2.3.4 я взял 4.2.2.2 для примера.
-
@a7lan
Секунду
Еще раз по пунктам- Адрес 192.168.200.200 - он живой ????
- На каком интерфейсе должна произойти подмена назначения ?
DNAT - в iptables используется для проброса портов ( насколько я понимаю ) с заменой адреса получателя
-
@konstanti Нет. Я просто его придумал. Но пусть даже будет живой. Думаю это не суть важно. Мне надо просто исходящий в интернет адрес назначения подменять. Получается на интерфейсе интернета. С транзитным трафиком это работает. Я пингую тот же 192.168.200.200 с компа в сети, и он перенаправляется на 4.2.2.2. А вот если тоже самое делать на самом шлюзе, то имеющееся правило не работает. То что я добавил видимо аналог PREROUTING в iptables. Куда естественно трафик локальных процессов не попадает.
-
@a7lan
Теперь все стало понятно
Боюсь , что такой "финт ушами" с базовым функционалом PF , не провернуть ( мб и есть такое решение , но мне оно не известно )
У Freebsd есть такая подсистема , называется Netgraph . Вот с ее помощью такое сделать можноТак , на вскидку
Нужны будут модули
ng_ether
ng_bpf
ng_patch
это для модификации пакетов в обоих направлениях
Те идея такая - подключаемся в разрыв между ядром и сетевым адаптером (ng_ether) , отлавливаем все пакеты с назначением , к примеру 192.168.200.200 ( ng_bpf) и меняем поле назначение ip пакета (ng_patch) ( к примеру на 2.2.2.2)
В обратном направлении - отлавливаем все пакеты от 2.2.2.2 и меняем назначение на 192.168.200.200- нужно будет не забыть пересчитать контрольные суммы ip пакетов
все это работает на уровне ядра ( те очень быстро )
трудность в том , что ng_ether и ng_bpf уже есть в ядре pf
а ng_patch нет . Те нужно качать версию Freebsd , соответствующую Вашей версии PF и компилировать этот модуль и вручную переносить его на PF -
@konstanti Понял. Жаль. Спасибо. Будем думать что делать.
-
@a7lan
если что , пишите мне в личку , думаю , что с моим вариантом смогу помочь ( если не найдете другого решения )Iptables в этом отношении более гибкая подсистема , чем PF
-
Дело в том, что при обращении к ресурсам ВНУТРИ сети трафик НЕ ИДЕТ через пф.
-
@werter
То есть мы не может даже блокировать исходящий трафик к локальным ресурсам? -
@a7lan said in Перенаправление локального трафика:
То есть мы не может даже блокировать исходящий трафик к локальным ресурсам?
Если работа сети в одном L2 сегменте, то ни pfSense, ни любой другой роутер не управляют этим трафиком. Если вы даже отключите pfSense вообще, хосты внутри сети продолжат общаться.
pfSense рулил бы трафиком, если бы сеть была поделена на подсети, а pfSense был бы между этими сетями маршрутизатором. -
@pigbrother Я не про обмен пакетами между устройствами в одной сети. Вопрос был Pfsens не умеет свой локальный трафик исходящий обрабатывать? блокировать например. Просто из комментария @werter звучит так, что исходящих трафик локальных процессов не идет через pf.
Говоря терминалогией iptables, тут нет iptables -t filter -A OUTPUT ... -j DROP ? -
@a7lan
Вопрос был Pfsens не умеет свой локальный трафик исходящий обрабатывать? - можетГоворя терминалогией iptables, тут нет iptables -t filter -A OUTPUT ... -j DROP ? - есть
-
@konstanti Жаль значит нет ната для локального трафика
-
@a7lan
я Вам об этом уже писал ранее . Блокировать исходящие пакеты PF умеет . То что вы хотите - нет . Решение существует . Но не из коробки . -
@a7lan
Это может Proxmox VE со своим 3-х уровневым Firewall-ом )