Очередной вопрос по rdrИмеется машина на FreeBSD являющаяся шлюзом. На ней включен форвардинг и стоит pf. На основе pf поднят NAT. За NAT'ом имеются две машины. Внимание задача: при обращении на порт 8000 машины запрос должен перенаправляться на одну из машин в сети на порт 22 (ssh). Собственно вот правила pf:
ext_if="re0"
int_if="rl0"rm_c="{ x.x.226.151 }"
work_c="{ 192.168.102.148, 192.168.102.70 }"nat on $ext_if from $work_c to any -> $ext_if
rdr on $ext_if proto tcp from any to y.y.247.33 port 8000 -> 192.168.102.70 port 22
block in on $ext_if all
pass in on $ext_if proto icmp from any
pass in on $ext_if proto tcp from any to $ext_if port 80
pass in on $ext_if proto tcp from $rm_c to $ext_if port 22
pass in on $ext_if proto tcp from any to any port 8000
pass in on $ext_if proto udp from any to any
pass on $int_if all
pass out on $ext_if proto tcp all modulate state
pass out on $ext_if proto { udp, icmp } all keep stateИ теперь вопрос - почему может не работать rdr?
> ext_if="re0"
> int_if="rl0"
> rm_c="{ x.x.226.151 }"
> work_c="{ 192.168.102.148, 192.168.102.70 }"
> nat on $ext_if from $work_c to any -> $ext_if
> rdr on $ext_if proto tcp from any to y.y.247.33 port 8000 ->
> 192.168.102.70 port 22а у вас на $ext_if какой адрес(а)?
y.y.247.33 ?
(посмотрите pfctl -sn)
а маршруты прописаны на этой машине и на 192.168.102.70 ?
$ext_if точно адрес такой.Поподробнее насчёт маршрутов, пожалуйста.
pass in on $ext_if proto { tcp } from any to 192.168.102.70 port 22 keep state
> pass in on $ext_if proto { tcp } from any to 192.168.102.70
> port 22 keep stateСпасибо большое! Не учёл это правило!
Для работы rdr мне кажется не хватает что-то типа:
pass in quick on $ext_if proto tcp from any to 192.168.102.70 port 22 flags S/SA keep state