|
[code:1]欢迎一起来完成:
http://www.huangdong.com/bbs/showthread.php?s=b81206ab6cdddc11f91c55396e3d39eb&postid=428#post428
FreeBSD 5.0 网关指南
版本 2.0. preview3
作者 黄冬([email protected])
1. 前言 1
2. 安装mpd 2
3. PPPoE 2
3.1. 使用ppp 2
3.1.1. 设置一个使用PPPOE的PPP呼出 2
3.1.2. 设置启动时自动进行连接 3
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服务 5
4.1. 启动PPP的NAT支持 5
4.1.1. 系统启动时自动启动 5
4.1.2. 手动启动 6
4.2. 使用IPFW的NATD 6
4.2.1. 系统配置 6
4.2.2. 为ppp设置natd 6
4.2.3. 为mpd设置natd 7
5. 配置文件总结 8
5.1. ppp拨出 8
5.1.1. /etc/rc.conf 8
5.1.2. /etc/ppp/ppp.conf 8
5.2. mpd拨出 9
5.2.1. kernel配置文件 9
5.3. ppp的nat拨出 9
5.4. 使用natd的ppp拨出 9
5.5. 使用natd的mpd拨出 9
5.6. 使用ipnat的ppp拨出 9
5.7. 使用ipnat的mpd拨出 9
1. 前言
本文原名叫做FreeBSD 5.0 ADSL安装指南,由于越做越大所以改名叫做网关安装指南。泛指有关网关的一系列应用的安装。这个名字还希望大家能出出主意。希望大家能把自己的一些意见和建议告诉我,我的联系方法是:[email protected]。同时也可以去http://www.huangdong.com/bbs/中的BSD版与大家一起讨论。
本文主要的目的是说明如何使用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
如果你没有安装Ports Collection,哪么也可以到http://www.huangdong.com/bbs/中的BSD版的精华区中找到mpd3.13的package安装包。使用package安装包的安装方法为:
pkg_add mpd-3.13.tbz
你还可以到http://www.dellroad.org/mpd/来下载mpd的源代码包自己手工编译,具体方法阅读源代码包中的README文件。
3. PPPoE
3.1. 使用ppp
3.1.1. 设置一个使用PPPOE的PPP呼出
将/etc/ppp中的ppp.conf进行备份,以下是新的ppp.conf中的内容:
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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
3.1.2. 设置启动时自动进行连接
在/etc/rc.conf中加入以下参数(ppp_mode设置断线重拨的功能):
ppp_enable="YES"
#ppp_mode="ddial"
ppp_mode="background"
ppp_profile="pppoe"
这里的ppp_profile对应的是/etc/ppp中的ppp.conf里的一个条目。
3.1.3. 手动连接
如果你想手动的发起一个连接,只需要在命令行上输入:
ppp –ddial pppoe
最后一个参数就是你在/etc/ppp中设置的ppp.conf中的一个条目。
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需要产生三个配置文件:
3.2.2.1. mpd.conf
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 uname
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。
3.2.2.3. mpd.secret
username "password"
使用你的在mpd.conf中的username来替换这里的username,使用你的PPPoE服务器的认证密码来替换这里的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. 系统启动时自动启动
同时还需要指定本台FreeBSD为一个网关服务器。在/etc/rc.conf中设置gateway选择以及ppp的拨号选项:
gateway_enable=”YES”
ppp_nat="YES"
natd_enable="YES"
natd_interface="tu0"
gateway_enable="YES"
除了在/etc/rc.conf中设置外,也可以在/etc/ppp/ppp.conf中加入以下设置:
nat enable yes
这样会打开ppp内置的NAT服务。如果在ppp.conf中加入了这个参数,哪么在rc.conf中是否加入ppp_nat=”YES”也就无所谓了。
对于使用ppp的NAT支持我们会发现它对于系统的kernel没有任何定制要求,所以对于轻型的应用和只是提供透明转发的网关使用ppp自带的NAT功能则是最好的选择。
4.1.2. 手动启动
如果已经改动了ppp.conf中的nat enable yes,哪么你还是可以使用ppp –ddial pppoe命令行来启动ppp。而且ppp也直接支持nat的功能。但是也可以能过:
ppp –nat –ddial pppoe
命令来手工显示的启用ppp的NAT支持。
4.2. 使用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. 设置系统启动时参数
在/etc/rc.conf中加入以下设置:
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之前你需要确认你的ppp会使用到的设备号。通常如果只拨接一次,哪么设备名就应是tun0了。在/etc/rc.conf中加入以下natd的设置:
natd_enable="YES"
natd_interface="tun0"
natd_flags="-f /etc/natd.conf"
同时别忘记在rc.conf中也需要gateway_enable="YES"这样的一个设置呀。由于我的portmapping项目比较多,所以我喜欢将所有的设置放入一个文件中,也就是/etc/natd.conf。以下是我的natd.conf的设置:
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这个参数。
4.2.3. 为mpd设置natd
在上节中我们说明了natd需要使用一个网络接口来做外网的网卡界面,在mpd中它使用的是ng0或是ngx。可以参考你的mpd.conf的设置。在本文档中使用的是ng0,所以我们的/etc/rc.conf中需要加入以下设置:
natd_enable="YES"
natd_interface="ng0"
natd_flags="-f /etc/natd.conf"
对于natd.conf中的设置见上节中的设置,其实在mpd和ppp下natd除了网卡接口不同外,其它都是一样的。
由于mpd不能通过/etc/rc.conf来启动,通过/usr/local/etc/rc.d中的shell脚本启动又会晚于natd启动的时间,所以为了在natd启动前来启动mpd,可以使用以下方法:
在/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删除哟。[/code:1] |
|