◎敘述 natd簡單的來說就是進行位址轉換,也就是說通常是用在真實ip位址不夠用時. 所採取的替代方案. ◎環境概說 ___________________ | | _______________ | FreeBSD NATD |-( 對外介面 xl0 真實ip位址)---->| gateway | |___________________| | 163.19.203.252 | | -------|-------- | | |(對內介面 rl0 虛擬ip位址) | | internet | 網際網路 _ _ _ _ _|_ _ _ _ _ | | | 虛擬ip LAN | |_ _ _ _ _ _ _ _ _ _ | 依照上圖,FreeBSD伺服器有兩張網卡,(非必要,後面會補充說明) 一張(xl0)對外設定真實ip位址(163.19.203.129) 一張(rl0)對內設定虛擬ip位址(192.168.10.254) 由於FreeBSD已內建natd服務,所以只需要進行一些小設定, 讓 FreeBSD 知道兩個區域網路,並且把虛擬ip LAN 的封包轉換過後由真實ip介面轉送出去. 有幾個步驟是必須的 0.設定兩張網卡,是基本也是必須!! 第一張網卡可以透過安裝時設定.此時並順便注意第二張網卡的代號. 第二張用手動設定會比較簡單.修改/etc/rc.conf defaultrouter="163.19.203.252" ifconfig_xl0="inet 163.19.203.129 netmask 255.255.255.128" ifconfig_rl0="inet 192.168.10.254 netmask 255.255.255.0" 真實ip的那張網卡不用特別注意,設定正確可以連上網路即可. 我對內的網卡代號為rl0,且我需要把他設定為虛擬的ip位址. 為了方便,我設一整個虛擬的區段(192.168.10.0/24). ip依照習慣定義為192.168.10.254 比較需要注意的是defaultrouter="163.19.203.252" 要設定為真實ip位址的閘道器ip位址. 簡而言之,只有紅色部分是額外加上的. 若您只有一張網卡,又不想再買一張... ~"~ (舉例我只有一張xl) ifconfig_xl0_alias0="inet 192.168.10.254 netmask 255.255.255.0" 就可以把那一張卡額外再加上一個ip位址. 1.重新編譯 kernel , 並在kernel文字敘述檔,加上以下的參數: options IPFIREWALL options IPFIREWALL_DEFAULT_TO_ACCEPT options IPDIVERT 加上這些參數是要讓kernel加上防火牆的功能.(原因在步驟4說明) 參照本站 更新ports/升級系統 > kernel 更新 並請注意 現在版本的LINT敘述檔 必須透過 make LINT 產生. 參照本站 FreeBSD改版訊息 > 4.x to 5.x 2.開機時自動啟動 gateway 功能 (也就是轉送封包的功能) 在/etc/rc.conf檔案末端新增 gateway_enable="YES" # Set to YES if this host will be a gateway. 或是 直接採用命令列方式轉送封包 (不建議這樣做,太麻煩) sysctl net.inet.ip.forwarding=1 3.定義natd的對外介面卡. 在/etc/rc.conf檔案末端新增 natd_interface="xl0" # Public interface or IPaddress to use. 請注意 其中 xl0 是我對外的網卡,您可以透過 ifconfig -a 查看系統所抓取到的網卡代號. 4.把流量 導向到(divert)natd 服務. 必須透過防火牆把流量導過去,所以你必須完成步驟1的kernel編譯. 透過/etc/rc.firewall檔案設定防火牆達到這個目的. 不過若你對防火牆沒有太大的興趣. 直接在檔案*最末端*加上這幾行也可以. /sbin/ipfw -f flush /sbin/ipfw add divert natd all from any to any via xl0 /sbin/ipfw add pass all from any to any 說明: 第一行:清空防火牆規則. 第二行:把所有natd的流量透過 xl0 介面導出.請依照自己的實際狀況修改. 第三行:放行所有的封包. 只設定這三行,將會造成你的區域網路只要把電腦的gateway(閘道器)設到你這個ip位置 就可以把封包透過你這台機器轉送,所以..若有需要請把防火牆規則加上. 當你額外再設定相關防火牆規則時,請把第二行加在其他規則之前, 以確定natd可以接收到所有的封包. 且封包會在natd轉換後 重新進入防火牆規則進行過濾. 5.開機時自動啟動 防火牆 功能 在/etc/rc.conf檔案末端新增 firewall_enable="YES" # Set to YES to enable firewall functionality 若是手動執行 (sh /etc/rc.firewall)防火牆功能,請務必確認你的規則不會把你自己給過濾掉. 也就是說 可能的話在本機而非遠端執行此動作. 6.開機時自動啟動 nat 轉換功能 在/etc/rc.conf檔案末端新增 natd_enable="YES" # Enable natd (if firewall_enable == YES). 7.重新啟動伺服器,natd就完成設定了. Clinet端設定: IP位址 : 192.168.10.0~255 子網路遮罩: 255.255.255.0 閘道器 : 192.168.10.254 (指定 natd對內網卡ip位址 作為閘道器位址) 這樣就可以節省很多ip位址嚕. ◎總結: 上述步驟是為了要把natd的流程寫出來,若只是要快速的建立natd服務. 且配合日後可能的防火牆設定.總結如下: a.編譯完kernel b.修改檔案:(請依照您實際狀況修改)/etc/rc.conf最後端加上這些參數: defaultrouter="163.19.203.252" ifconfig_xl0="inet 163.19.203.129 netmask 255.255.255.128" ifconfig_rl0="inet 192.168.10.254 netmask 255.255.255.0" firewall_enable="YES" # Set to YES to enable firewall functionality firewall_type="OPEN" # Firewall type (see /etc/rc.firewall) natd_enable="YES" # Enable natd (if firewall_enable == YES). natd_interface="xl0" # Public interface or IPaddress to use. gateway_enable="YES" # Set to YES if this host will be a gateway. c.並且在 /etc/firewall 找到下方設定,新增紅色部分 case ${firewall_type} in [Oo][Pp][Ee][Nn]) setup_loopback ${fwcmd} -f flush ${fwcmd} add 10000 divert natd all from any to any via xl0 # 可能擴充的防火牆規則放在這 ${fwcmd} add 65000 pass all from any to any ;; 說明:由於先前firewall_type設定為OPEN所以我在OPEN這個地方加上設定. d.重新啟動伺服器,設定clinet端,就完成了. ◎補充:上述/etc/rc.conf中新增的參數設定 /etc/defaults/rc.conf 中都有 養成好習慣用複製的,不要直接修改 /etc/defaults/rc.conf 檔案 ◎作者: ArchIE Cobbs <archie@FreeBSD.org> (divert sockets) Charles Mott <cm@linktel.net> (packet aliasing) Eivind Eklund <perhaps@yes.no> (IRC support & misc additions) Ari Suutari <suutari@iki.fi> (natd) Dru Nelson <dnelson@redwoodsoft.com> (early PPTP support) Brian Somers <brian@awfulhak.org> (glue) Ruslan Ermilov <ru@FreeBSD.org> (natd, packet aliasing, glue) ◎資料來源: NATD(8)
标签: