作者starlition (unknown)
看板FreeBSD
标题Re: [请益] 用Packet Filter(PF) 做 IP mapping 遇 …
时间Sat May 1 05:38:17 2010
※ 引述《yzupcbug (请加入HOT_Game板)》之铭言:
: 架构大致如下:
: PC1(server)--| pppoe1 | | |
: PC2----------|em1 FreeBSD pppoe2 em0|----|FTTB VDSL|
: PC3----------| | | |
: IP如下:
: PC1: 192.168.198.3/24
: PC2: 192.168.198.4/24
: PC3: 192.168.198.5/24
: FreeBSD
: em1: 192.168.198.254/24
: em0不带IP
: pppoe1: 固IP, next-hop 1.1.1.1, 介面为tun0
: pppoe2: 动IP, next-hop 1.1.1.2, 介面为tun1
: 想要达到的目的:
: 由 FreeBSD 拨接 PPPoE 出去取得 public IP, 然後 固IP mapping 到 PC1,
: 使得外面连线到 固IP 时, 就等同於连线到 PC1;
: 而 动IP 则作为其它 PC 连外的 NAT(更正确应该说是 PAT) 使用
: 做法:
: 使用PF, 设定档pf.conf如下:
: int_if="em1"
: int_ip="192.168.198.254"
: int_lan="192.168.198.0/24"
: dyn1_if="tun1"
: dyn1_gw="1.1.1.2"
: static_if="tun0"
: static_gw="1.1.1.1"
: set block-policy return
: scrub in all
: #将固IP介面上, src为内网的封包做NAT转换为固IP
: nat on $static_if from $int_lan to any -> $static_if
: #将动IP介面上, src为内网的封包做NAT转换为动IP
加一行 nat on $int_if from 192.168.198.3 port 220 to any -> $static_if
: nat on $dyn1_if from $int_lan to any -> $dyn1_if
: #将连线到固IP的port 220 转到192.168.198.3, 测试看看.
: rdr on $static_if from any to $static_if port 220 -> 192.168.198.3
: pass all
: #抓取预设出口端的封包, 若src为固IP的就将下一站设为固IP的下一站
: pass out on $dyn1_if route-to ($static_if $static_gw) proto tcp from $static_if to any flags any
: pass out on $dyn1_if route-to ($static_if $static_gw) proto {udp,icmp} from $static_if to any
: #因仅指定的来源转去固IP, 不会有其他封包走错路到static_if
: #pass out on $static_if route-to ($dyn1_if $dyn1_gw) proto tcp from $dyn1_if to any flags any
: #pass out on $static_if route-to ($dyn1_if $dyn1_gw) proto {udp,icmp} from $dyn1_if to any
: #设定PUM server的封包改走static if出去
: pass in on $int_if route-to ($static_if $static_gw) proto tcp from 192.168.198.3 to any flags any
: pass in on $int_if route-to ($static_if $static_gw) proto {udp,icmp} from 192.168.198.3 to any
: 结果:
: PC1 连线去外面的话, 如预期地走 固IP 出去;
: 但若是外面连到 固IP port 220,则会有问题, 出现的状况如下:
: 1.FreeBSD 转送了该 SYN 封包给 PC1
: 2.PC1 回送 SYN/ACK 封包 给外面来源
: 3.FreeBSD 从em1收到该封包, 经过转换後, src 换成 固IP
: 4.该封包就这样依照 default gateway 是走 动IP 的介面而送出去了,
: 没有再被抓回来转送到 固IP 介面送出.
: 想请教不知道有没有人有这方面的经验可以指点问题在哪?
我印象中
NAT的封包不需另外pass就会通过
(也就是说pass对nat无意义? <- 不大确定)
--
☆ ◢╱◣ ◢╱ ★ ◢╱◢╱ ◢╱ ◢╱ ☆
◢█
◣◤◢█
╱╱ ◢╱◢◤█
██
◤◢█
╱╱█
◤ ○ ◢╱◢╱◣ ☆
█
╱╱◣███
◤ ◢╱◣ █
◢◤ █
█◢╱███
◤◢╱◢∕︿╱█
◢█
◣╱
◥█
◣╱ █
█ ◢█
◣╱ █
◤ █
██
█ █
█ █
██
﹨ ██
█ █
█ ψ
◢██
◤ █
╱╱█
╱█
╱◣█
█ █
██
█ █
╱╱█
██
╱█
██
█ █
█ 土
◥█◤ ◥█
◤◥██
◣◤█
◤★ █
◤█
◤ ◥█
◤█
◤███
◤█
◤ █
◤★ 拨
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.128.194.95