红联Linux门户
Linux帮助

FreeBSD 5.0 网关指南(好东西,不容错过)

发布时间:2006-08-30 00:26:24来源:红联作者:disney
本文基本上是最后的版本了,过些日子我会把所有的配置文件理出来,不过哪会是单独发布或是比较晚的事了。因为现在我的机器上的配置文件太多了。主要是当初想写一个太大的文章了。版主可以将本文放入精华,上次的跟贴太多,以后的更新我基本上会回本贴了。
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。
文章评论

共有 0 条评论