PF 的傳輸埠導向

如果你的NAT需要開放一些SSH或是一些服務的埠號導向後方的電腦們,這時你就需要設定一些導埠的的語法將所需的服務開通並導向正確的電腦們。
檔案設定在 /etc/pf.conf
[cc lang=”bash”]
if_ext=”vtnet0″
if_int=”vtnet1″

#用兩台mysql的原因是需要靠外部的SSH連進去管理。因此請照你目前NAT的後方的電腦的服務狀況來設定。
mysqla01=”192.168.101.141″
mysqla02=”192.168.101.142″

net_lan=”192.168.101.0/24″

set skip on lo0

nat on $if_ext from $net_lan -> ($if_ext:0)
no nat on $if_ext from !$net_lan to any

#導向ssh的通訊埠
rdr pass on $if_ext proto tcp from any to any port 22141 -> $mysqla01 port 22
rdr pass on $if_ext proto tcp from any to any port 22142 -> $mysqla02 port 22
rdr pass on $if_ext proto tcp from any to any port 22 -> 192.168.101.254 port 22

#原本要阻擋所有導進來的通訊,為了能測試通過導向,先開啟所有通訊埠。未來再找資料做個比較好的設定。
#block in on $if_ext
pass in on $if_ext

pass out
[/cc]

其設定的重點就是在rdr的部份,照以上的格式,可以將NAT對外的網卡以any to any的方式將來自於埠號22141連進第一台mysql的SSH之22埠。
然後用pfctl -nf /etc/pf.conf 來測試是否有正確,然後再下pfctl -f /etc/pf.conf 載入變更後的設定檔。
因此下了指令 pfctl -ns
[cc lang=”bash”]
$ pfctl -sn
No ALTQ support in kernel
ALTQ related functions disabled
nat on vtnet0 inet from 192.168.101.0/24 to any -> (vtnet0:0)
no nat on vtnet0 inet from ! 192.168.101.0/24 to any
rdr pass on vtnet0 inet proto tcp from any to any port = 22141 -> 192.168.101.141 port 22
rdr pass on vtnet0 inet proto tcp from any to any port = 22142 -> 192.168.101.142 port 22
rdr pass on vtnet0 inet proto tcp from any to any port = ssh -> 192.168.101.254 port 22
[/cc]
只要看到上述的內容有正確,就可以方便進入管理NAT後方的電腦了。

用FreeBSD9架設pf + NAT

最近在試這個NAT的架設方法,我用了三天去試,總算今天給我試出來了。在google上所查到的文件都是舊的,因此讓我花了不少時間去try設定。
現在的 FreeBSD 9.0 已經不用再去重新編譯核心讓其支援 PF + NAT 的功能,因此這部步驟就可以省略不做。
目前需要做的事就是設定 /etc/rc.conf 跟 /etc/pf.conf

/etc/rc.conf
[cc lang=”bash”]
ifconfig_vtnet0=”DHCP”
ifconfig_vtnet1=”inet 192.168.101.254 netmask 255.255.255.0″
hostname=”nat.domain”
pf_enable=”YES”
gateway_enable=”YES”
[/cc]
網路的設定,可以把第一張對外的網卡設定成DHCP,第二張對內的網卡設定成虛擬IP。以讓後面的電腦去接對內的網卡,而其餘的電腦就設定固定的虛擬IP並把閘道設定為第二張網卡的IP。

/etc/pf.conf
[cc lang=”bash”]
if_ext=”vtnet0″
if_int=”vtnet1″
net_lan=”192.168.101.0/24″

set skip on lo0

nat on $if_ext from $net_lan -> ($if_ext:0)
no nat on $if_ext from !$net_lan to any

block in on $if_ext
pass out
[/cc]
現在的設定方式是用PF的功能,並照設定檔的方式將封包轉譯出去。這時NAT才能工作。

設定好之後,重開機,這台NAT就是一台IP分享器了!