歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> BSD

FreeBSD 5.0 網關指南(好東西,不容錯過)


本文基本上是最後的版本了,過些日子我會把所有的配置文件理出來,不過哪會是單獨發布或是比較晚的事了。因為現在我的機器上的配置文件太多了。主要是當初想寫一個太大的文章了。版主可以將本文放入精華,上次的跟貼太多,以後的更新我基本上會回本貼了。
1. 前言 2
2. 安裝mpd 2
3. PPPoE 3
3.1. 使用ppp 3
3.1.1. 設置一個使用PPPOE的PPP呼出 3
3.1.2. 設置啟動時自動進行連接 4
3.1.3. 手動連接 4
3.2. 使用mpd 4
3.2.1. 配置你的新kernel 4
3.2.2. 配置mpd配置文件 4
3.2.3. 設置啟動時自動進行連接 5
3.2.4. 手動連接 5
4. 設置NAT服務 6
4.1. 啟動PPP的NAT支持 6
4.1.1. 系統啟動時自動啟動 6
4.1.2. 手動啟動 6
4.2. 使用IPFW的NATD 6
4.2.1. 系統配置 6
4.2.2. 為ppp設置natd 7
4.2.3. 為mpd設置natd 7
4.3. 使用ipfilter的ipnat 8
4.3.1. 系統配置 8
4.3.2. 為ppp設置ipnat 9
4.3.3. 為mpd設置ipnat 9
5. 配置文件總結 9
5.1. ppp手工撥出 9
5.2. ppp自動撥出 10
5.3. mpd手工撥出 11
5.3.1. kernel配置文件 11
5.4. mpd自動撥出 11
5.5. ppp的nat手工撥出 11
5.6. ppp的nat自動撥出 11
5.7. 使用natd的ppp手工撥出 11
5.8. 使用natd的ppp自動撥出 11
5.9. 使用natd的mpd手工撥出 11
5.10. 使用natd的mpd自動撥出 12
5.11. 使用ipnat的ppp手工撥出 12
5.12. 使用ipnat的ppp自動撥出 12
5.13. 使用ipnat的mpd手工撥出 12
5.14. 使用ipnat的mpd自動撥出 12
1. 前言
本文主要的目的是說明如何使用FreeBSD來建立一個網關,它涉及的有ADSL(PPPoE)、VPN(PPTP)、NAT、Firewall。我不想寫成一個大全樣的文章,主要針對的目標是現在寬帶中大家會慢慢多用起來的PPPoE和VPN。
本文不會涉及到傳統的電話撥號的部分,主要的原因一是有太多的文章講它了。而Firewall的深入的討論本文也不會提及,因為講它本身就會是一個與本文一樣的篇幅了,相信對於IPFW、IPFilter會有人寫一個更為專業的文章的。
為了讓大家明白PPPoE與PPTP的不同,以免產生我之前的混淆,先告訴大家它們的用處。現在我們使用PPPoE主要是ADSL,我們可以視ADSL Modem只是一個撥號器,它不帶網絡功能,就像使用本機設備一樣的去使用它。而PPTP則是在網絡上具有一個IP地址的服務器,我所知通常在校園網、公司網中會大量使用這樣的撥號服務器以進行記費或是安全保障。
本文使用的PPPoE和PPTP的工具主要是FreeBSD自帶的ppp和使用Netgraph的mpd。可以使用ppp來達到PPPoE撥號的功能,使用mpd則可實現PPPoE和PPTP的功能。由於mpd的強大,在使用PPTP時我更推薦大家使用mpd。
感覺quakelee在推薦給了我mpd這樣一個好的工具,同時對mpd的所做的普及化的工作。以及oneflower及時的指出了巧妙的使用ipfw配置文件的方法。同時還要感謝絕對灌水不斷的催促才使這個文章能這麼快的再出一個新的版本。更要感覺我家的大寶寶和小寶寶,他們允許我使用家中的ADSL設備來測試本文中的所有設置。?
2. 安裝mpd
由於ppp是FreeBSD自帶的一個功能,mpd則是一個FreeBSD的附加軟件。你可以使用FreeBSD的Ports Collection來編譯它。mpd最新的版本為3.13,使用ports的編譯方法為:
cd /usr/ports/net/mpd
make install
make clean
pkg_add mpd-3.13.tbz
3. PPPoE
3.1. 使用ppp
3.1.1. 設置一個使用PPPOE的PPP呼出
default:
set log Phase Chat LCP IPCP CCP tun command
nat enable yes
nat same_ports yes
nat use_sockets yes
set redial 15 28800
set reconnect 15 28800
pppoe:
#加入在kernel中配置的會連接ADSL設備的網卡的名稱,我的是fxp0
set device PPPoE:fxp0:
set mru 1492
set mtu 1492
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname Your UserName used to login
set authkey Your Password used to login
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR# Add a (sticky) default route
enable dns
#注意:只有三處需要進行更改的地方,它們是PPPoE:fxp0: 以及用戶名和密碼。
如果你不知道自已網卡的設備名哪麼可以通過ifconfig –a命令來得到,我的計算機的結果如下:
fxp0: flags=8843; mtu 1500
inet 192.168.10.50 netmask 0xffffff00 broadcast 192.168.10.255
ether 00:d0:59:0d:08:03
media: Ethernet autoselect (10baseT/UTP)
status: active
lo0: flags=8049; mtu 16384
inet 127.0.0.1 netmask 0xff000000
3.1.2. 設置啟動時自動進行連接
ppp_enable="YES"
#ppp_mode="ddial"
ppp_mode="background"
ppp_profile="pppoe"
3.1.3. 手動連接
如果你想手動的發起一個連接,只需要在命令行上輸入:
ppp –ddial pppoe
3.2. 使用mpd
3.2.1. 配置你的新kernel
為ADSL的PPPOE協議在kernel配置文件中加入以下內容:
# ADSL PPPOE Sup
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_PPPOE
在重新編譯、安裝並重啟機器後,就可以使用netgraph了。也就是可以正常使用mpd了。
3.2.2. 配置mpd配置文件
mpd的配置文件都存儲在/usr/local/etc/mpd中,在安裝好mpd後它已經為我們產生了一系列的sample文件。我們使用PPPoE需要產生三個配置文件:
PPPoE:
new -i ng0 PPPoE PPPoE
set iface addrs 1.1.1.1 2.2.2.2
set iface route default
set iface disable on-demand
set iface idle 0
set bundle disable multilink
set bundle authname username
set link no acfcomp protocomp
set link disable pap chap
set link accept chap
set link mtu 1460
set ipcp yes vjcomp
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
open iface
這裡你需要使用你的PPPoE的用戶名來替換set bundle authname後面的username。
3.2.2.2. mpd.links
PPPoE:
set link type pppoe
set pppoe iface fxp0
set pppoe service "adsl"
這裡需要使用你的網卡的設備名來替換fxp0。
username "password"
3.2.3. 設置啟動時自動進行連接
在/usr/local/etc/rc.d目錄中新建一個文件,名為000.mpd.sh,內容為:
/usr/local/sbin/mpd -b PPPoE
需要注意的是,你需要讓000.mpd.sh有可執行的能力。可以使用這條命令:
chmod +x /usr/local/etc/rc.d/000.mpd.sh
3.2.4. 手動連接
其實就是000.mpd.sh中的哪句話了:
/usr/local/sbin/mpd -b PPPoE
4. 設置NAT服務
4.1. 啟動PPP的NAT支持
4.1.1. 系統啟動時自動啟動
gateway_enable=”YES”
ppp_nat="YES"
natd_enable="YES"
natd_interface="tu0"
gateway_enable="YES"
nat enable yes
對於使用ppp的NAT支持我們會發現它對於系統的kernel沒有任何定制要求,所以對於輕型的應用和只是提供透明轉發的網關使用ppp自帶的NAT功能則是最好的選擇。
4.1.2. 手動啟動
ppp –nat –ddial pppoe
命令來手工顯示的啟用ppp的NAT支持。
4.2. 使用IPFW的NATD
IPFW/NATD是FreeBSD內置的防火牆軟件。可以使用IPFW來進行進出包過濾,使用NATD來實現透明網關。
4.2.1. 系統配置
4.2.1.1. 在kernel中加入防火牆配置
在kernel配置文件中加入以下選項參數:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
4.2.1.2. 設置系統啟動時參數
ipfirewall_enable="YES"
firewall_type="open"
4.2.2. 為ppp設置natd
為了使ppp具有portmapping這樣的功能哪麼使用natd則是必然的了。對於ppp,在啟動ppp後使用ifconfig會發現ppp啟動和tun0或是tunx這樣的一個設備,它是使用kernel中的:
device tun # Packet tunnel.
natd_enable="YES"
natd_interface="tun0"
dynamic yes
redirect_port tcp 192.168.10.100:80 8080
redirect_port udp 192.168.10.100:3782 3782
redirect_port udp 192.168.10.100:3783 3783
redirect_port tcp 192.168.10.100:3782 3782
redirect_port tcp 192.168.10.100:3783 3783
由於是使用的ppp,它的ip地址是動態分配的,所以使用的dynamic yes這個參數。redirect_port的作用則是將本機的tcp或是udp的一個端口的連接傳發至內網的一個IP地址的端口之上。
4.2.3. 為mpd設置natd
natd_enable="YES"
natd_interface="ng0"
在/etc/rc.firewall的
############
# Flush out the list before we begin.
#
${fwcmd} -f flush
後面加入
/usr/local/sbin/mpd -b PPPoE
sleep 10
這樣就可以讓natd啟動時,mpd已經啟動,並已經為ng0網卡動態得到了IP地址。需要注意的是,不要忘記把/usr/local/etc/rc.d中的mpd.sh刪除喲。
4.3. 使用ipfilter的ipnat
在FreeBSD下最為流行的就是IPFW/NATD及ipfilter/ipnat兩個安全組合了。對於FreeBSD的core team來說,他們更推薦使用IPFW/NATD,而ipfilter/ipnat則是可以運行於多種操作系統之上的一個安全方案。包括Solaris、HPUX、IBM AIX及各種BSD。之所以在這裡加入了ipfilter/ipnat的說明是因為我個人更喜歡ipfilter的實時監控功能和ipnat的方便更新配置的功能。
4.3.1. 系統配置
4.3.1.1. 在kernel中加入ipfilter的支持
在kernel的配置文件中需要加入以下參數:
options IPFILTER
options IPFILTER_LOG
options RANDOM_IP_ID
需要注意的是,ipfilter與IPFW不能共存,所以請檢查是否也有IPFW的配置參數,如果有將它們注釋或刪除。
4.3.1.2. 設置啟動時參數
ipfilter_enable="YES"
ipnat_enable="YES"
4.3.1.3. 設置ipfilter參數
在/etc/ipf.rules中加入以下參數:
pass in all
pass out all
不要罵我為什麼把防火牆全開著,如果你需要對防火牆做設置時,請參考ipfilter的設置罷。
4.3.2. 為ppp設置ipnat
ipfilter_enable="YES"
ipnat_enable="YES"
同時設置/etc/ipnat.rules:
map tun0 192.168.10.0/24 ->; 0/32 portmap tcp/udp 10000:65535
map tun0 192.168.10.0/24 ->; 0/32
rdr tun0 0/0 port 8080 ->; 192.168.10.100 port 80 tcp
前兩行是做透明網關的設置,最後一行的設置說明了將tun0上的8080端口的tcp訪問轉發至192.168.10.100。
4.3.3. 為mpd設置ipnat
ipfilter_enable="YES"
ipnat_enable="YES"
同時設置/etc/ipnat.rules:
map ng0 192.168.10.0/24 ->; 0/32 portmap tcp/udp 10000:65535
map ng0 192.168.10.0/24 ->; 0/32
rdr ng0 0/0 port 8080 ->; 192.168.10.100 port 80 tcp
前兩行是做透明網關的設置,最後一行的設置說明了將ng0上的8080端口的tcp訪問轉發至192.168.10.100。
Copyright © Linux教程網 All Rights Reserved