URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93213
[ Назад ]

Исходное сообщение
"И снова Free9.0 + PF: NAT есть, проброса нет"

Отправлено Yarikson , 02-Апр-12 16:55 
Видел несколько похожих тем но так и не нашел решения.

Дано - стоит машинка FreeBSD 9.0 + PF
2 сетевые карты, одна снаружи с белым IP, вторая внутри шлюзом у всех машин

sysctl ip.forwarding включен
gateway_enable="YES" стоит

проблема: работает NAT, работает форвард снаружи - не работает форвард изнутри на локальный порт машины
Конкретно - перехват порта 80 с заворачиванием на squid, но это в данном случае не важно т.к. не работает никакой перехват - например проброс на локальный адрес на порт 22 тоже не работает

По результатам tcpdump - пакеты на внутреннем интерфейсе видны, а на lo0 уже ничего нет

'pfctl -sa' правило редиректа показывает (fxp0 - внутренняя карточка) :
rdr pass on fxp0 inet proto tcp from 192.168.200.0/24 to any port = http -> 192.168.200.1 port 3127
  [ Evaluations: 27        Packets: 21        Bytes: 1040        States: 4     ]
  [ Inserted: uid 0 pid 82759 State Creations: 8     ]

пробую с машины 192.168.200.8, с нее разрешил вообще все (см ниже конфиг)

Конфиг PF:

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> {ИПшники}
table <priv> {ИПшники тех кто не все}

set block-policy drop
set loginterface $ext_if

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 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

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


UPDATE:
а) при написании правила редиректа в виде
rdr pass on $int_if proto { tcp } from $internal_net to any port 87 -> 192.168.200.1 port 3127
Редирект при обращении на сам хост 192.168.200.1 на порт 87 работает нормально - идет коннект на висящий на машинке Сквид ('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 есть, проброса нет"
Отправлено artemrts , 02-Апр-12 22:46 
>[оверквотинг удален]
> 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 , 03-Апр-12 10:55 
Сделал как вы писали:
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 , 03-Апр-12 11:43 
>[оверквотинг удален]
> 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 , 03-Апр-12 12:37 
Вот весь текущий конфиг: (У меня тоже жила себе 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 , 03-Апр-12 21:15 
>[оверквотинг удален]
> $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 , 04-Апр-12 11:32 
Сейчас попробую ваши причесанные правила.
Судя по всему у меня проблема с недопониманием НАТа, свято верил что на внешнем интерфейсе можно по отправителю из локальной сети фильтровать :)
Посмотрел на дамп, понял всю глубину своего заблуждения...

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 , 04-Апр-12 13:04 
>[оверквотинг удален]
> 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 , 04-Апр-12 13:50 
Нет, клиент не настраивал никак. Клиент - и браузер и просто 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 , 04-Апр-12 14:05 
>[оверквотинг удален]
> 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 , 04-Апр-12 14:06 
>[оверквотинг удален]
>> 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 , 04-Апр-12 14:17 
делаю просто 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 , 04-Апр-12 17:58 
Приколы нашего городка :)
На свежеустановленной виртуалке с ровно тем же конфигом (копипаст кроме ессно имен интерфейсов) редирект работает

Ядро то же стоковое, осталось только одно отличие - я на живом сервере обновлял World, конфы там все брал дефолтные т.к. делал это сразу еще на пустой машине

sysctl net.inet - существенных отличий не нашел, нет такого чтобы где-то было 1 где-то 0


"И снова Free9.0 + PF: NAT есть, проброса нет"
Отправлено Yarikson , 07-Апр-12 23:18 
Печально - но проблема так и не решилась обновлением исходников и пересборкой ядра и мира ...

"И снова Free9.0 + PF: NAT есть, проброса нет"
Отправлено artemrts , 07-Апр-12 23:37 
> Печально - но проблема так и не решилась обновлением исходников и пересборкой
> ядра и мира ...

Хм... Как обновляли, пересобирали?..


"И снова Free9.0 + PF: NAT есть, проброса нет"
Отправлено Yarikson , 07-Апр-12 23:58 
Обновил через 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 , 08-Апр-12 00:41 
>[оверквотинг удален]
> 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 , 08-Апр-12 20:22 
Странно - в хэндбуке эти шаги опущены
8.  make delete-old
11. make delete-old-libs
В остальном все именно так и делал (про KERNCONF= скипнул т.к. без этой опции кастомное ярдо не собрать все равно никак )

ну да не суть
mergemaster -p я скипнул т.к. а) делал его при первом обновлении и б) сервак на удаленке, физического доступа у меня к нему нет соотв. в сингл-юзер его выводить не стоит :)

Есть у меня мысль как буду физически у сервака поиграться интерфейсами, может просто поменять местами или другие сетевые платы поставить... Других идей пока больше нет


"И снова Free9.0 + PF: NAT есть, проброса нет"
Отправлено Yarikson , 26-Апр-12 18:33 
Переписал конфу - сделал с тегированием пакетов, но счастье не произошло... проброс снаружи так и есть, проброса изнутри так и нет.

Физически пока не добрался до сервака чтобы с интерфейсами поиграться

Как бы это дело подебагить - что происходит с пакетом после его прихода на внутренний интерфейс, почему он теряется... ?

конфа стала такой:

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