Имеется сервер с OpenBSD4.7-stable с тремя интерфейсами:
- bge0 - смотрит в инет с белым адресом, прописан default gateway
- gem0 - смотрит во внутреннюю сеть 10.x.x.x/8
- vr0 - имеет серый адрес 192.168.1.50, подключен к LAN порту soho роутера (192.168.1.1), который через свой WAN-порт подключен к другому провайдеру по pppoe.
Через первого провайдера все замечательно работает, можно ходить в инет через NAT, мапить порты внутрь.
Через второго можно пускать некоторых клиентов из внутренней сети при помощи route-to (vr0 192.168.1.1) и тоже NAT работает.
Вопрос: как мапить порты со второго провайдера хотя бы на эту машину?
Я делаю так:
- На SOHO-роутере я настраиваю forwarding нужного порта на 192.168.1.50
- «tcpdump -i vr0» показывает приходящие на 192.168.1.50 пакеты с реального адреса в интернете, с которого я их отправляю.
- Ответы сервак посылает на этот же реальный адрес в интернете, но через bge0 (так показывает «tcpdump -i bge0»), то есть через тот интерфейс, на котором прописан default gateway, несмотря на reply-to в конфиге.
Вот pf.conf
##### Macros #####
ext="bge0"
int="gem0"
# Trusted ports (TCP)
so="{ 21, 22, 25, 80, 110, 119, 143, 443, 465, 587, 993, 2083, 3389, 5000, 5190, 5222, 8080, 8443 }"
##### Tables #####
table <Network> const counters { 10.0.0.0/8 }
##### Options #####
set skip on lo
set state-policy if-bound
set block-policy return
##### Traffic Normalization #####
match all scrub (random-id reassemble tcp)
##### Translation #####
match out on vr0 from <Network> to any nat-to (vr0)
match out on bge0 from <Network> to any nat-to (bge0)
##### Packet Filtering #####
block in
pass out quick on bge0 from 192.168.1.50 route-to (vr0 192.168.1.1)
pass out quick on vr0 from bge0 route-to (bge0 12.34.56.78)
pass out quick
# block some shit
block in quick on $ext from any to 255.255.255.255
block in quick on $ext from <Private> to any
antispoof quick for { lo $int }
pass proto icmp all
# Pass inter-networks
pass quick on $int from <Network> to <Network>
# Pass to neighbourhood
pass in quick on $int from <Network> to 192.168.1.0/24
# Pass trusted TCP
pass in on $int proto tcp from any to any port $so
# Pass DNS & NTP
pass in on $int proto udp from any to any port { 53, 123 }
# GW
pass in on $ext proto tcp from any to ($ext) port 22 synproxy state
pass in on vr0 proto tcp from any to (vr0) port 5001 reply-to (vr0 192.168.1.1)
Что я делаю не так?