- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 22:46 , 02-Апр-12 (1)
>[оверквотинг удален] > int_if="fxp0" > internal_net=$int_if:network > tcp_services="{ 13671 }" > allowed_ports="{5190, 2041, 2042, 2043, 2044}" > web_ports="{80, 8080, 443}" > icmp_types="echoreq" > table <remote> {ИПшники} > table <priv> {ИПшники тех кто не все} > set block-policy drop > set loginterface $ext_if Добавьте set state-policy if-bound > set skip on ng Если это интерфейс mpd, то это вы зря. Лучше up/down скриптами добавлять\удалять правила для ВПНа. >[оверквотинг удален] > nat-anchor "ftp-proxy/*" > rdr-anchor "ftp-proxy/*" > rdr pass on $ext_if proto tcp from <remote> to $ext_if port > 81 -> 192.168.200.1 port 81 > rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443 > -> 192.168.200.7 > rdr pass on $int_if proto tcp to !($int_if) port ftp -> 127.0.0.1 > port 8021 > rdr pass on $int_if proto { tcp } from $internal_net to any > port 80 -> 192.168.200.1 port 3127 Отвыкайте от этой плохой привычки втупую разрешать трафик в правилах nat/rdr. Вы же теряете контроль над ним. Лично я дополнительно прописываю потом разрешающие правила на внешний интерфейс с разрилчными лимитами. Например, доступ к рабочему столу виндовой машины в локальной сети rdr on $ext_if inet proto tcp from any to ($ext_if) port 3389 -> 10.11.1.2 port 3389 pass in quick on $ext_if inet proto tcp from <me> to !(self) port 3389 (max 10) Теперь конкретно о вашей проблеме. Допустим, сквид или чето-там висит на 127.0.0.1:3128 и вы хотите перенаправить весь трафик от пользователей локальной сети с портом назначения 80 на локальный проксик (получается transparent proxy), тогда: rdr on $int_if inet proto tcp from ($int_if:network) to !(self) port 80 -> 127.0.0.1 port 3128 pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3128 >[оверквотинг удален] > - идет коннект на висящий на машинке Сквид ('telnet 192.168.200.1 87' > с машины внутри сети) > А вот например 'telnet ya.ru 87' виснет на connecting to ya.ru... > б) при написания редиректа на лупбэк: > rdr pass on $int_if proto { tcp } from $internal_net to any > port 87 -> 127.0.0.1 port 3127 > уже не работает ничего, ни на саму машину ни наружу > IP-адрес ya.ru резолвится нормально, проверил > машина имеет полные права ходить везде (pass quick log from 192.168.200.8 to > any - в правилах)
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 10:55 , 03-Апр-12 (2)
Сделал как вы писали: rdr on $int_if inet proto tcp from ($int_if:network) to !(self) port 80 -> 127.0.0.1 port 3127 pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3127 (3127 - не опечатка, у меня сквид на 3127 слушает на транспарент-прокси)sockstat | grep 3127 squid squid 1380 13 tcp4 *:3127 *:* (слушает на всех интерфейсах опять же для отладки, когда заработает - повешу только на 127.0.0.1) Но увы, эффекта нет - tcpdump на внутреннем интерфейсе видит приходящие пакеты 10:51:41.416794 IP 192.168.200.8.51199 > www.yandex.ru.http: Flags [S], seq 3312057733, win 8192, options [mss 1460,nop,nop,sackOK], length 0 10:51:42.805104 IP 192.168.200.8.51201 > yandex.ru.http: Flags [S], seq 493083439, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 а вот на lo0 - нет ни одного пакета.
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 11:43 , 03-Апр-12 (3)
>[оверквотинг удален] > squid squid 1380 > 13 tcp4 *:3127 > *:* > (слушает на всех интерфейсах опять же для отладки, когда заработает - повешу > только на 127.0.0.1) > Но увы, эффекта нет - tcpdump на внутреннем интерфейсе видит приходящие пакеты > 10:51:41.416794 IP 192.168.200.8.51199 > www.yandex.ru.http: Flags [S], seq 3312057733, > win 8192, options [mss 1460,nop,nop,sackOK], length 0 > 10:51:42.805104 IP 192.168.200.8.51201 > yandex.ru.http: Flags [S], seq 493083439, win > 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 Но у меня-то работает. Причем еще и ALTQ есть. Что-то делаете не так. Давайте весь конфиг.
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 12:37 , 03-Апр-12 (4)
Вот весь текущий конфиг: (У меня тоже жила себе Free6.4, работала...) Ядро сейчас стоковое - компилил свое но пока откатился чтобы исключить эту возможную причину. Система ставилась сразу 9.0, + делался апдейт через cvsup самой системы и портовext_if="xl0" int_if="fxp0" internal_net=$int_if:network tcp_services="{ 13671 }" allowed_ports="{5190, 2041, 2042, 2043, 2044}" web_ports="{80, 8080, 443}" icmp_types="echoreq" table <remote> {IP} table <priv> {IP, IP, IP} set block-policy drop set loginterface $ext_if set state-policy if-bound set skip on ng nat on $ext_if from $internal_net to any -> ($ext_if) nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" rdr pass on $ext_if proto tcp from <remote> to $ext_if port 81 -> 192.168.200.1 rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443 -> 192.168.200.7 rdr pass on $int_if proto tcp to !($int_if) port ftp -> 127.0.0.1 port 8021 rdr on $int_if inet proto tcp from ($int_if:network) to !(self) port 80 -> 127.0.0.1 port 3127 pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3127 pass quick log from 192.168.200.8 to any antispoof quick for { lo $int_if } anchor "ftp-proxy/*" block in log on $ext_if pass in quick on $int_if from any to any pass out quick on $int_if from any to any pass out quick on $ext_if from ($ext_if) to any pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services pass in on $ext_if inet proto tcp from <remote> to 192.168.200.7 port 443 synproxy state pass out quick on $ext_if proto udp from $internal_net to any port 123 keep state pass out quick on $ext_if from <priv> to any pass out on $ext_if proto {tcp, udp} from $internal_net to any port $allowed_ports А у вас какая версия фряхи? Видел посты с похожей на мою проблемой при апгрейде с 8-ки на 9-ку
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 21:15 , 03-Апр-12 (5)
>[оверквотинг удален] > $tcp_services > pass in on $ext_if inet proto tcp from <remote> to 192.168.200.7 port > 443 synproxy state > pass out quick on $ext_if proto udp from $internal_net to any port > 123 keep state > pass out quick on $ext_if from <priv> to any > pass out on $ext_if proto {tcp, udp} from $internal_net to any port > $allowed_ports > А у вас какая версия фряхи? Видел посты с похожей на мою > проблемой при апгрейде с 8-ки на 9-ку У меня 9. Дело в том, что в 9-ке не обовсех ошибках сообщает парсер pfctl. На эти грабли в свое время, как только вышла 9-ка наступил. Мелочная ошибка в синтаксисе, pfctl -nf /etc/pf.conf ошибки не выдает, правила загружаются, но инет не работает. Я даже PR запостил по этому поводу. Вот если упорядочить и упростить ваши правила, то получится что-то типа этого. ext_if="xl0" int_if="fxp0" internal_net=$int_if:network tcp_services="{ 13671 }" allowed_ports="{5190, 2041, 2042, 2043, 2044}" web_ports="{80, 8080, 443}" icmp_types="echoreq" table <remote> {IP} table <priv> {IP, IP, IP} set block-policy drop set loginterface $ext_if set state-policy if-bound set skip on ng nat on $ext_if from $internal_net to any -> ($ext_if) nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" rdr on $ext_if proto tcp from <remote> to $ext_if port 81 -> 192.168.200.1 rdr on $ext_if proto tcp from <remote> to $ext_if port 443 -> 192.168.200.7 rdr on $int_if inet proto tcp from ($int_if:network) to !($int_if) port ftp -> 127.0.0.1 port 8021 rdr on $int_if inet proto tcp from ($int_if:network) to !($int_if) port 80 -> 127.0.0.1 port 3127 ## antispoofing antispoof quick for { lo $int_if } ## At first block all block in block out ## Allow rules ## ext_if pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services pass in quick on $ext_if inet proto tcp from <remote> to 192.168.200.1 port 81 pass in quick on $ext_if inet proto tcp from <remote> to 192.168.200.7 port 443 pass out quick on $ext_if inet from $ext_if to any ## int_if anchor "ftp-proxy/*" pass in log quick on $int_if inet proto tcp from ($int_if:network) to 127.0.0.1 port 3127 pass in quick on $int_if from ($int_if:network) to any pass out quick on $int_if from any to ($int_if:network) Непонятно это. pass out quick on $ext_if proto udp from $internal_net to any port 123 keep state Так не получится, т.к. после ната на внешнем интерфейсе локальных адресов уже нет. Выход таков. Тегировать пакеты на внутреннем ифейсе а потом выпускать их на внешнем. Как это делать читайте в FAQe на openbsd.org pass out quick on $ext_if from <priv> to any pass out on $ext_if proto {tcp, udp} from $internal_net to any port $allowed_ports
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 11:32 , 04-Апр-12 (6)
Сейчас попробую ваши причесанные правила. Судя по всему у меня проблема с недопониманием НАТа, свято верил что на внешнем интерфейсе можно по отправителю из локальной сети фильтровать :) Посмотрел на дамп, понял всю глубину своего заблуждения...UPDATE прописал ровно ваш конфиг без последних трех бесполезных правил. Проброса внутри так и нет. Не может быть такого что в стоковом ядре нужно что-то включить через sysctl например? У меня возникло смутное дежавю - разве при перенаправлении в дампе нет в скобках указания куда оно идет? На вашей системе дамп выглядит так же? (хотя возможно путаю с записами таблицы состояний) tcpdump -i fxp0 -vv | grep 192.168.200.8 192.168.200.8.63629 > www.yandex.ru.http: Flags [S], cksum 0x8cfb (correct), seq 3067585866, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 pfctl -sn nat on xl0 inet from 192.168.200.0/24 to any -> (xl0) round-robin nat-anchor "ftp-proxy/*" all rdr-anchor "ftp-proxy/*" all rdr on xl0 inet proto tcp from <remote> to [IP] port = hosts2-ns -> 192.168.200.1 rdr on xl0 inet proto tcp from <remote> to [IP] port = https -> 192.168.200.7 rdr on fxp0 inet proto tcp from (fxp0:network) to ! (fxp0) port = ftp -> 127.0.0.1 port 8021 rdr on fxp0 inet proto tcp from (fxp0:network) to ! (fxp0) port = http -> 127.0.0.1 port 3127 pfctl -ss | grep 192.168.200.8 fxp0 udp 255.255.255.255:1947 <- 192.168.200.8:60474 NO_TRAFFIC:SINGLE fxp0 udp 192.168.200.255:1947 <- 192.168.200.8:60474 NO_TRAFFIC:SINGLE fxp0 tcp 127.0.0.1:3127 (93.158.134.3:80) <- 192.168.200.8:63707 CLOSED:SYN_SENT fxp0 tcp 127.0.0.1:3127 (93.158.134.203:80) <- 192.168.200.8:63711 CLOSED:SYN_SENT fxp0 tcp 127.0.0.1:3127 (213.180.193.3:80) <- 192.168.200.8:63712 CLOSED:SYN_SENT pfctl -sr block drop in quick on ! lo inet6 from ::1 to any block drop in quick on ! lo inet from 127.0.0.0/8 to any block drop in quick inet from 127.0.0.1 to any block drop in quick on ! fxp0 inet from 192.168.200.0/24 to any block drop in quick inet from 192.168.200.1 to any block drop in quick inet6 from ::1 to any block drop in quick on lo0 inet6 from fe80::1 to any block drop in quick on fxp0 inet6 from [fe80:IPv6] to any block drop in all block drop out all pass in on xl0 inet proto tcp from any to (xl0) port = ssh-nst flags S/SA keep state (if-bound) pass in quick on xl0 inet proto tcp from <remote> to 192.168.200.1 port = hosts2-ns flags S/SA keep state (if-bound) pass in quick on xl0 inet proto tcp from <remote> to 192.168.200.7 port = https flags S/SA keep state (if-bound) pass out quick on xl0 inet from [IP] to any flags S/SA keep state (if-bound) anchor "ftp-proxy/*" all pass in log quick on fxp0 inet proto tcp from (fxp0:network) to 127.0.0.1 port = 3127 flags S/SA keep state (if-bound) pass in quick on fxp0 from (fxp0:network) to any flags S/SA keep state (if-bound) pass out quick on fxp0 from any to (fxp0:network) flags S/SA keep state (if-bound)
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 13:04 , 04-Апр-12 (7)
>[оверквотинг удален] > port = https flags S/SA keep state (if-bound) > pass out quick on xl0 inet from [IP] to any flags S/SA > keep state (if-bound) > anchor "ftp-proxy/*" all > pass in log quick on fxp0 inet proto tcp from (fxp0:network) to > 127.0.0.1 port = 3127 flags S/SA keep state (if-bound) > pass in quick on fxp0 from (fxp0:network) to any flags S/SA keep > state (if-bound) > pass out quick on fxp0 from any to (fxp0:network) flags S/SA keep > state (if-bound) Вы же клиент никак не настраивали? Прокси не прописывали? Тут не надо все прозрачно. У меня подозрения, что сам прокси не работает. Попробуйте прописать клиенту прокси, повесить его на внутренний адрес и проверти его работу, а уже потом прозрачно. Уменя внутри несколько сетевых в мосте. Редирект ДНС на внешний и НТТР на локалхост на прокси. Все работает отлично. rdr on bridge0 inet proto tcp from (bridge0:network) to ! (self) port = domain -> 193.58.251.251 port 53 rdr on bridge0 inet proto udp from (bridge0:network) to ! (self) port = domain -> 193.58.251.251 port 53 rdr on bridge0 inet proto tcp from (bridge0:network) to ! (self) port = http -> 127.0.0.1 port 31280
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 13:50 , 04-Апр-12 (8)
Нет, клиент не настраивал никак. Клиент - и браузер и просто telnetСам прокси работает, через него в инет все ходят исправно. И сокстат его показывает, и коннект на него напрямую есть: C:\Users\user>telnet ya.ru 80 Connecting To ya.ru...Could not open connection to the host, on port 80: Connect failed C:\Users\user>telnet 192.168.200.1 3127 все хорошо, есть коннект, на запрос Сквид выдает страницу UPDATE На самой Фре - локально ничего не коннектится... []# telnet 192.168.200.1 3128 Trying 192.168.200.1... telnet: connect to address 192.168.200.1: Operation not permitted telnet: Unable to connect to remote host telnet 127.0.0.1 25 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Operation not permitted telnet: Unable to connect to remote host telnet 192.168.200.1 25 Trying 192.168.200.1... telnet: connect to address 192.168.200.1: Operation not permitted telnet: Unable to connect to remote host Те же самые порты (25, 110, 3127, 3128 ...) из внутренней сети работают на ура UPDATE2 Добавил в конфиг set skip on lo0 - telnet 127.0.0.1 3127 поехал но с внешнего клиента так и не коннект
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 14:05 , 04-Апр-12 (9)
>[оверквотинг удален] > Trying 127.0.0.1... > telnet: connect to address 127.0.0.1: Operation not permitted > telnet: Unable to connect to remote host > telnet 192.168.200.1 25 > Trying 192.168.200.1... > telnet: connect to address 192.168.200.1: Operation not permitted > telnet: Unable to connect to remote host > Те же самые порты (25, 110, 3127, 3128 ...) из внутренней сети > работают на ура > Добавил set skip on lo0 - эффекта нет Правила правильно перегружаете? pfctl -F rules /etc/pf.conf и pfctl -F nat /etc/pf.conf ? Ну не знаю. Пробуйте на виртуалке отладить. Поочереди исключая все возможные ошибки.
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 14:06 , 04-Апр-12 (10)
>[оверквотинг удален] >> telnet: Unable to connect to remote host >> telnet 192.168.200.1 25 >> Trying 192.168.200.1... >> telnet: connect to address 192.168.200.1: Operation not permitted >> telnet: Unable to connect to remote host >> Те же самые порты (25, 110, 3127, 3128 ...) из внутренней сети >> работают на ура >> Добавил set skip on lo0 - эффекта нет > Правила правильно перегружаете? pfctl -F rules /etc/pf.conf и pfctl -F nat > /etc/pf.conf ? Так правильнее -) pfctl -F rules -f /etc/pf.conf .....
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 14:17 , 04-Апр-12 (11)
делаю просто pfctl -f /etc/test.conf (чтобы если что накосячу - при ребуте обратно все встало) Такой вызов ведь очищает старые правила и грузит новые - или у меня снова недостаток знаний? :)) Смотрел по выводу 'pfctl -sr' вроде правила подменяютсяДля очистки совести сделал полный флаш pfctl -F all -f /etc/pfc.cnf но результата так и нет (заапдейтил старый пост - telnet после set skip on lo0 стал подключаться на 127.0.0.1 но в общем и все) Виртуалка - да, уже поднята под это дело... Если интересно - отпишусь по результатам
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 17:58 , 04-Апр-12 (12)
Приколы нашего городка :) На свежеустановленной виртуалке с ровно тем же конфигом (копипаст кроме ессно имен интерфейсов) редирект работает Ядро то же стоковое, осталось только одно отличие - я на живом сервере обновлял World, конфы там все брал дефолтные т.к. делал это сразу еще на пустой машине sysctl net.inet - существенных отличий не нашел, нет такого чтобы где-то было 1 где-то 0
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 23:18 , 07-Апр-12 (13)
Печально - но проблема так и не решилась обновлением исходников и пересборкой ядра и мира ...
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 23:37 , 07-Апр-12 (14)
> Печально - но проблема так и не решилась обновлением исходников и пересборкой > ядра и мира ...Хм... Как обновляли, пересобирали?..
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 23:58 , 07-Апр-12 (15)
Обновил через cvsup (часть конфига) *default release=cvs tag=RELENG_9 src-allдалее - по хэндбуку make buildworld make buildkernel (сначала скомпилил и поставил GENERIC) make installkernel reboot make installworld mergemaster когда убедился что все завелось (но не завелось то что мне нужно :) ) - собрал кастомное ядро на основе стандартного, сильно не допиливал - убрал ненужные дрова сети и добавил pf и ALTQ в ядро
- И снова Free9.0 + PF: NAT есть, проброса нет, artemrts, 00:41 , 08-Апр-12 (16)
>[оверквотинг удален] > make buildworld > make buildkernel (сначала скомпилил и поставил GENERIC) > make installkernel > reboot > make installworld > mergemaster > когда убедился что все завелось (но не завелось то что мне нужно > :) ) - собрал кастомное ядро на основе стандартного, сильно не > допиливал - убрал ненужные дрова сети и добавил pf и ALTQ > в ядро Если быть точным, то хронология такова: 1. cd /usr/src 2. make buildworld 3. make buildkernel KERNCONF=Имя_конфига_ядра_указанного_в_опции_ident 4. make installkernel KERNCONF=Имя_конфига_ядра_указанного_в_опции_ident 5. reboot (in single user mode: boot -s from the loader prompt). 6. mergemaster -p 7. make installworld 8. make delete-old 9. mergemaster -iUF 10. reboot 11. make delete-old-libs - И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 20:22 , 08-Апр-12 (17)
Странно - в хэндбуке эти шаги опущены 8. make delete-old 11. make delete-old-libs В остальном все именно так и делал (про KERNCONF= скипнул т.к. без этой опции кастомное ярдо не собрать все равно никак )ну да не суть mergemaster -p я скипнул т.к. а) делал его при первом обновлении и б) сервак на удаленке, физического доступа у меня к нему нет соотв. в сингл-юзер его выводить не стоит :) Есть у меня мысль как буду физически у сервака поиграться интерфейсами, может просто поменять местами или другие сетевые платы поставить... Других идей пока больше нет
- И снова Free9.0 + PF: NAT есть, проброса нет, Yarikson, 18:33 , 26-Апр-12 (18)
Переписал конфу - сделал с тегированием пакетов, но счастье не произошло... проброс снаружи так и есть, проброса изнутри так и нет.Физически пока не добрался до сервака чтобы с интерфейсами поиграться Как бы это дело подебагить - что происходит с пакетом после его прихода на внутренний интерфейс, почему он теряется... ? конфа стала такой: ext_if="xl0" int_if="fxp0" internal_net="192.168.200.0/24" tcp_services="{ PORT }" allowed_ports="{5190, 2041, 2042, 2043, 2044}" web_ports="{80, 8080, 443}" icmp_types="echoreq" table <remote> {IP} table <priv> {IP, IP, IP } set block-policy drop set loginterface $ext_if set skip on lo scrub in nat on $ext_if from !($ext_if) tagged USER_TRAFFIC -> ($ext_if:0) nat on $ext_if from !($ext_if) tagged PRIV_TRAFFIC -> ($ext_if:0) nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" rdr pass on $ext_if proto tcp from <remote> to $ext_if port 80 tag REMOTE_WEB -> 192.168.200.7 rdr pass on $ext_if proto tcp from <remote> to $ext_if port 443 tag REMOTE_HTTPS -> 192.168.200.7 rdr pass on $int_if proto tcp from $int_if:network to !($int_if) port ftp -> 127.0.0.1 port 8021 rdr pass on $int_if proto tcp from $int_if:network to !($int_if) port 80 -> 127.0.0.1 port 3127 rdr pass on $int_if proto tcp from $int_if:network to !($int_if) port 81 -> 127.0.0.1 port 8181 block all antispoof quick for { lo $int_if } anchor "ftp-proxy/*" pass quick on lo0 pass out quick on $int_if from any to $int_if:network pass in quick on $int_if from $int_if:network to $int_if pass out quick on $ext_if from ($ext_if) to any pass in quick on $ext_if tagged REMOTE_WEB synproxy state pass in quick on $ext_if tagged REMOTE_HTTPS synproxy state pass in on $ext_if inet proto tcp from any to ($ext_if) port $tcp_services pass in on $int_if inet proto tcp from $int_if:network to !($int_if) port $allowed_ports tag USER_TRAFFIC pass in on $int_if from <priv> to !($int_if) tag PRIV_TRAFFIC pass in on $ext_if from <remote> to any
|