利用FreeBSD用户级的PPP做FreeBSD下的ADSL共享上网,可以使用较低的设备配置,实现g8dLinux联盟 g8dLinux联盟 局域网的稳定的网络链路共享。同时还可以增加Squid做上网的代理,进一步增加局域网g8dLinux联盟 g8dLinux联盟 上网的速度。g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 FreeBSD可以对PPP提供两种不同方式的支持,一种是内核级PPP,它将PPP协议代码编译g8dLinux联盟 g8dLinux联盟 进内核,并运行一个PPP守护进程pppd,提供对PPP的支持,这是比较传统的方法,但配g8dLinux联盟 g8dLinux联盟 置比较困难。另一种为用户级PPP,使用一个应用程序PPP,通过通用tunnel设备传递PPPg8dLinux联盟 g8dLinux联盟 数据,配置较为容易。一般情况下可以使用用户级的PPP来建立拨号方式的Internet连接。g8dLinux联盟 g8dLinux联盟 准备g8dLinux联盟 g8dLinux联盟 安装基本的FreeBSD环境,具体可以参照www.freebsdchina.org李冬的《FreeBSD服务器g8dLinux联盟 g8dLinux联盟 指南》。必须安装操作系统源代码中的”sys”部分,下面需要重新编译内核以支持防火墙。g8dLinux联盟 g8dLinux联盟 然后还需要确认在/etc/ppp目录中是否存在ppp.conf 或者ppp.conf.sample文件。g8dLinux联盟 g8dLinux联盟 实例g8dLinux联盟 g8dLinux联盟 Dell gx110 PIII 128M 10G 3com905B-tx 10/100Mbps自适应PCI网络适配器。g8dLinux联盟 g8dLinux联盟 安装设置g8dLinux联盟 g8dLinux联盟 在 FreeBSD 下上网必须要有 tun 这个伪设备,所以必须在内核中加入对 tun 的支持。g8dLinux联盟 g8dLinux联盟 在 tun 后面的 1 指定同时可以使用的 tun 设备的个数。g8dLinux联盟 g8dLinux联盟 要让整个局域网上的用户都可以访问 Internet 您的机器必须有两张网卡,一个连接g8dLinux联盟 g8dLinux联盟 ADSL设备,一个连接局域网的HUB或者switch。另外必须重新编译一次内核。这些选项g8dLinux联盟 g8dLinux联盟 主要是在内核中加入对IP转发的支持。客户机将IP数据包发到FreeBSD,然后FreeBSDg8dLinux联盟 g8dLinux联盟 就将这些数据包转发到指定的地址。这就是让 FreeBSD 带动整个局域网上网的基本原理。g8dLinux联盟 g8dLinux联盟 实例g8dLinux联盟 g8dLinux联盟 在内核文件中添加如下内容:g8dLinux联盟 g8dLinux联盟 device tun 1 # 根据实践发现此行内容可以不加。g8dLinux联盟 g8dLinux联盟 options IPFIREWALL # 打开防火墙选项g8dLinux联盟 g8dLinux联盟 options IPFIREWALL_FORWARDg8dLinux联盟 g8dLinux联盟 options IPFIREWALL_VERBOSE # 向系统的注册程序发送注册信息包g8dLinux联盟 g8dLinux联盟 options IPFIREWALL_VERBOSE_LIMIT=100 # 限制一台机器注册的次数g8dLinux联盟 g8dLinux联盟 options IPFIREWALL_DEFAULT_TO_ACCEPT # 使得缺省的规则允许所有形式的访问g8dLinux联盟 g8dLinux联盟 options IPDIVERT # 启用由ipfw divert使用的转向IP套接字g8dLinux联盟 g8dLinux联盟 # 这一选项需要与natd联合使用g8dLinux联盟 g8dLinux联盟 要启用ipfw,必须设置IPFIREWALL选项,它将通知操作系统的内核检查每个IP数据包,g8dLinux联盟 g8dLinux联盟 将它们与规则集进行比较,通过添加IPFIREWALL_VERBOSE选项包括注册支持是一个好主g8dLinux联盟 g8dLinux联盟 意,还应该通过添加IPFIREWALL_VERBOSE_LIMIT选项来限制内核注册的数据包的数量。g8dLinux联盟 g8dLinux联盟 配置g8dLinux联盟 g8dLinux联盟 还需要设置etc/ppp/ppp.conf文件g8dLinux联盟 g8dLinux联盟 实例g8dLinux联盟 g8dLinux联盟 /etc/ppp/ppp.confg8dLinux联盟 g8dLinux联盟 default:g8dLinux联盟 g8dLinux联盟 set log Phase tun command # g8dLinux联盟 g8dLinux联盟 set ifaddr 10.0.0.1/0 10.0.0.2/0 #设置本地PPP连接的IP地址g8dLinux联盟 g8dLinux联盟 adsl : #配置代号g8dLinux联盟 g8dLinux联盟 set device PPPoE: xl1 # 用你的网卡设备名称替代xl1g8dLinux联盟 g8dLinux联盟 set authname #你的ADSL登陆名称g8dLinux联盟 g8dLinux联盟 set authkey #你的账号密码g8dLinux联盟 g8dLinux联盟 set dialg8dLinux联盟 g8dLinux联盟 set loging8dLinux联盟 g8dLinux联盟 add default HISADDR # 设置默认路由为对方的地址g8dLinux联盟 g8dLinux联盟 enable dns #从拨号服务器中获得正确的DNS服务器地址g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 配置g8dLinux联盟 g8dLinux联盟 最后,设置/etc/rc.conf文件打开gateway选项。g8dLinux联盟 g8dLinux联盟 实例g8dLinux联盟 g8dLinux联盟 编辑/etc/rc.conf 文件g8dLinux联盟 g8dLinux联盟 加入:g8dLinux联盟 g8dLinux联盟 gateway_enable="YES"g8dLinux联盟 g8dLinux联盟 特别提示:如果要实际开机自动拨号,还要增加以下内容到 /etc/rc.conf 文件里!g8dLinux联盟 g8dLinux联盟 ppp_enable="YES"g8dLinux联盟 g8dLinux联盟 ppp_mode="ddial"g8dLinux联盟 g8dLinux联盟 ppp_nat="YES"g8dLinux联盟 g8dLinux联盟 ppp_profile="adsl" # 所要拨号的配置代号g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 配置g8dLinux联盟 g8dLinux联盟 在如上述配置完毕,网络访问会有问题,因为防火墙的默认配置是都不可访问。下面需g8dLinux联盟 g8dLinux联盟 要配置防火墙规则来允许访问,和禁止访问。g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 实例g8dLinux联盟 g8dLinux联盟 首先用如下命令察看当前的防火墙配置:g8dLinux联盟 g8dLinux联盟 /sbin/ipfw –a showg8dLinux联盟 g8dLinux联盟 然后执行以下的命令进行防火墙的设置:g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 00400 divert natd ip from any to any via xl0 //用于启动Natd 服务g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 00001 deny log ip from any to any ipopt rr g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 00002 deny log ip from any to any ipopt tsg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 00003 deny log ip from any to any ipopt ssrrg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 00004 deny log ip from any to any ipopt lsrrg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 00005 deny tcp from any to any in tcpflags syn,fing8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 19997 check-stateg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 19998 allow tcp from any to any out keep-state setupg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 19999 allow tcp from any to any outg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 20001 allow udp from any 53 to me in recv xl0 //允许外网的DNS服务器的信息进入改服务器g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 29999 allow udp from any to any out //允许自己的UDP包往外发,进行DNS信息查询g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 30000 allow icmp from any to any icmptypes 3g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 30001 allow icmp from any to any icmptypes 4g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 30002 allow icmp from any to any icmptypes 8 outg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 30003 allow icmp from any to any icmptypes 0 in g8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 30004 allow icmp from any to any icmptypes 11 ing8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 40000 allow all from 192.168.0.0/16 to anyg8dLinux联盟 g8dLinux联盟 /sbin/ipfw add 40001 allow all from any to 192.168.0.0/16g8dLinux联盟 g8dLinux联盟 /sbin/ipfw flush //使防火墙规则生效g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 最后用/sbin/ipfw –a show 察看修改后的防火墙设置:g8dLinux联盟 g8dLinux联盟 00001 0 0 deny log logamount 100 ip from any to any ipopt rrg8dLinux联盟 g8dLinux联盟 00002 0 0 deny log logamount 100 ip from any to any ipopt tsg8dLinux联盟 g8dLinux联盟 00003 0 0 deny log logamount 100 ip from any to any ipopt ssrrg8dLinux联盟 g8dLinux联盟 00004 0 0 deny log logamount 100 ip from any to any ipopt lsrrg8dLinux联盟 g8dLinux联盟 00005 0 0 deny tcp from any to any in tcpflags fin,syng8dLinux联盟 g8dLinux联盟 00100 516 68656 allow ip from any to any via lo0g8dLinux联盟 g8dLinux联盟 00200 0 0 deny ip from any to 127.0.0.0/8g8dLinux联盟 g8dLinux联盟 00300 0 0 deny ip from 127.0.0.0/8 to anyg8dLinux联盟 g8dLinux联盟 00400 0 0 divert 8668 ip from any to any via xl0g8dLinux联盟 g8dLinux联盟 19997 0 0 check-stateg8dLinux联盟 g8dLinux联盟 19998 368990 279745596 allow tcp from any to any keep-state out setupg8dLinux联盟 g8dLinux联盟 19999 872 154180 allow tcp from any to any outg8dLinux联盟 g8dLinux联盟 20001 0 0 allow udp from any 53 to me in recv xl0g8dLinux联盟 g8dLinux联盟 29999 3758 444913 allow udp from any to any outg8dLinux联盟 g8dLinux联盟 30000 145 9690 allow icmp from any to any icmptype 3g8dLinux联盟 g8dLinux联盟 30001 0 0 allow icmp from any to any icmptype 4g8dLinux联盟 g8dLinux联盟 30002 0 0 allow icmp from any to any out icmptype 8g8dLinux联盟 g8dLinux联盟 30003 0 0 allow icmp from any to any in icmptype 0g8dLinux联盟 g8dLinux联盟 30004 0 0 allow icmp from any to any in icmptype 11g8dLinux联盟 g8dLinux联盟 40000 7572 714836 allow ip from 192.168.0.0/16 to anyg8dLinux联盟 g8dLinux联盟 65535 3213 496794 allow ip from any to anyg8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 成功配置文档模板g8dLinux联盟 g8dLinux联盟 rc.conf:g8dLinux联盟 g8dLinux联盟 hostname="sample.com"g8dLinux联盟 g8dLinux联盟 ifconfig_xl1="inet 192.168.9.6 netmask 255.255.255.0"g8dLinux联盟 g8dLinux联盟 kern_securelevel_enable="NO"g8dLinux联盟 g8dLinux联盟 nfs_reserved_port_only="NO"g8dLinux联盟 g8dLinux联盟 firewall_enable="YES"g8dLinux联盟 g8dLinux联盟 firewall_script="/etc/rc.firewall"g8dLinux联盟 g8dLinux联盟 firewall_type="/etc/ipfw.conf"g8dLinux联盟 g8dLinux联盟 firewall_quiet="YES"g8dLinux联盟 g8dLinux联盟 firewall_logging_enable="YES"g8dLinux联盟 g8dLinux联盟 sendmail_enable="NO"g8dLinux联盟 g8dLinux联盟 sshd_enable="YES"g8dLinux联盟 g8dLinux联盟 usbd_enable="NO"g8dLinux联盟 g8dLinux联盟 gateway_enable="YES"g8dLinux联盟 g8dLinux联盟 natd_interface="xl0"g8dLinux联盟 g8dLinux联盟 natd_enable="YES"g8dLinux联盟 g8dLinux联盟 natd_flags="-config /etc/natd.conf"g8dLinux联盟 g8dLinux联盟 ppp_enable="YES"g8dLinux联盟 g8dLinux联盟 ppp_mode="ddial"g8dLinux联盟 g8dLinux联盟 ppp_nat="YES"g8dLinux联盟 g8dLinux联盟 ppp_profile="adsl"g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 g8dLinux联盟 /etc/ppp/ppp.conf:g8dLinux联盟 g8dLinux联盟 default:g8dLinux联盟 g8dLinux联盟 set log Phase tun commandg8dLinux联盟 g8dLinux联盟 set ifaddr 10.0.0.1/0 10.0.0.2/0g8dLinux联盟 g8dLinux联盟 adsl:g8dLinux联盟 g8dLinux联盟 set device PPPoE:xl0g8dLinux联盟 g8dLinux联盟 set mru 1492g8dLinux联盟 g8dLinux联盟 set mtu 1492g8dLinux联盟 g8dLinux联盟 set authname ad50103024g8dLinux联盟 g8dLinux联盟 set authkey Sstc1602g8dLinux联盟 g8dLinux联盟 set dialg8dLinux联盟 g8dLinux联盟 set loging8dLinux联盟 g8dLinux联盟 add default HISADDR