Mac OS X 設定NAT與port forwarding

Mac OS X版本:OS X El Capitan 10.11

Mac OS 的防火牆軟體在10.10已經將IPFW取消,改用OpenBSD的PF,有關PF的User guide 可參考:https://www.openbsd.org/faq/pf/,或在此下載PDF說明。

PF 原則上在Mac OS X都會自動啟動,如果不讓PF於開機時啟動,可以執行下面的指令:

# rcctl disable pf

重啟Mac即可生效。

下面二個指令可啟動與關閉PF功能:

# pfctl -e
# pfctl -d

PF於系統開機時(Booting),會讀取pf.conf這個設定檔(位於 /etc/pf.conf),透過rc的scripts來載入的。主要也是透過pfctl這個指令來執行設置。其他常用的pfctl指令如下:

# pfctl -f /etc/pf.conf 載入pf.conf這個設定檔
# pfctl -nf /etc/pf.conf 解析/etc/pf.conf這個設定檔,但不載入
# pfctl -sr 顯示目前防火牆的設置
# pfctl -ss 顯示現在連線狀態
# pfctl -si 顯示過濾狀態以及統計
# pfctl -sa 顯示所有狀態訊息
其他完整的指令可按下這裡進行詳閱

以下僅針對pf.conf有關NAT與Port Forwarding的防火牆設置的簡單說明:

順序很重要,Port Forwarding的指令必須在NAT之前,否則會出現錯誤訊息

Port forwarding:

若要將ppp連線或對外接口的特定port轉換到內網某個特定IP的特定port,例如:tcp 9922轉換到內網192.168.1.5的ssh (port 22)則設定為:

rdr on ppp0 proto tcp from any to 222.3.15.2port 9922 -> 192.168.1.5 port 22

外網的IP為222.3.15.2,當外面連接這個地址port 9922則轉到192.168.1.5 port 22這個位址:

rdr on ppp0 proto tcp from any to 222.3.15.2 port 1935 -> 192.168.1.18

則連接到外網222.3.15.2的port 1935則轉到192.168.1.18的相同位址(port 1935)。

NAT讓內網可以透過這台MAC連上Internet

nat on ppp0 from 192.168.1.0/24 to any -> 222.3.15.2
pass from 192.168.1.0/24 to any keep state

222.3.15.2為外網IP,以上定義內網192.168.1.0/24皆可轉為222.3.15.2外網IP直接連上Internet