FreeBSD搭建NAT并在单网卡上配置多个VLAN

本人需要在一台装有FreeBSD8.3的服务器上搭建NAT防火墙做地址转换,服务器有两个网卡bge0和bge1,bge0通过思科三层交换机端口fa0/6与内网相连,bge1连接至公网,假设其IP为3.3.3.3,网络拓扑如下所示:

FreeBSD搭建NAT并在单网卡上配置多个VLAN

二、NAT搭建

1、设定内核

首先,我们必须先确定核心有支持 NAT 及防火墙功能。FreeBSD 预设的 GENERIC 核心并未加入此功能,因此,请先编辑您的核心设定档,加入下列设定,并重新编译核心。如果您不知道如何修改核心设定,请参考「编译核心」一章的说明。假设 我们要修改的核心设定档为 /usr/src/sys/i386/conf/GENERIC,先 cd /usr/src/sys/i386/conf/,再 ee GENERIC 加入下列几行:

# 防火墙

options IPFIREWALL

# 支持 NAT

options IPDIVERT

# 下面这一行是预设允许所有封包通过,如果没有这一行,

# 就必须在 /etc/rc.firewall 中设定封包的规则。

# 这条规则内定编号是 65535,也就是所有规则的最后一条

# 如果没有加这一条规则,内定就是拒绝所有封包,

# 只允许规则中允许的封包通过。

options IPFIREWALL_DEFAULT_TO_ACCEPT

# 这一行是让你可以在 ipfw 中设定要记录哪些封包,

# 如果没有这一行,就算设定了要留下记录也不会有作用。

options IPFIREWALL_VERBOSE

# 这一行是限制每一条规则所要记录的封包数量,

# 因为同样的规则可能有许多记录,加上这一条可以使

# 同样的记录重复数减少,以避免记录文件爆增。

options IPFIREWALL_VERBOSE_LIMIT=10

# 下面这一行是用来支援封包转向,

# 当你要使用 fwd 动作时必须要有这一项设定。

options IPFIREWALL_FORWARD

# 如果要使用 pipe 来限制频宽,必须加入下列选项以支持 dummynet。

options DUMMYNET

我们在上述设定中加入了许多项目,基本上,一定要有的项目为 IPFIREWALL 及 IPDIVERT,其它项目是为了支持限制频宽或记录信息使用。编辑完核心设定后,请重新编译并安装新的核心,重开机之后核心就己经支持防火墙及 NAT 了。

2、修改rc.conf

设定连接至外网的网卡bge1,并确定可以上网,这里暂不设置bge0,由于要划分VLAN,所以在后面设置。我们要修改 /etc/rc.conf 以启动 NAT 功能:

#设定默认路由

defaultrouter="3.3.3.1"

# 设定外网卡的 IP

ifconfig_bge1="inet 3.3.3.3  netmask 255.255.255.0"

# 设定启用 gateway 的功能。

gateway_enable="YES"

# 设定启用防火墙功能,并设定防火墙类型为 OPEN。

# FreeBSD 的防火墙设定档会自动为 NAT 加入相关的设定。

firewall_enable="YES"

firewall_type="OPEN"

# 设定 NAT 所使用的对外网络卡

natd_interface="bge1"

natd_enable="YES"

编辑结束之后,重启网络/etc/netstart restart,在你的网关以及DNS设置正确的情况下应该是可以正常上网的。

3、编辑/etc/rc.local

如果没有,就新建该文件。由于我想在bge0上划分多个vlan,所以我在该文件中写入以下配置,以便开机能够自动运行。我在bge0上划分了两个vlan,分别是vlan3(192.168.0.69)和vlan99(192.168.2.69):

/sbin/ifconfig vlan3 create

/sbin/ifconfig vlan3 vlan 3 vlandev bge0

/sbin/ifconfig vlan3 192.168.0.69 255.255.255.0

/sbin/ifconfig vlan3 mtu 1500

/sbin/ifconfig vlan3 up

/sbin/ifconfig vlan99 create

/sbin/ifconfig vlan99 vlan 99 vlandev bge0

/sbin/ifconfig vlan99 192.168.2.69 255.255.255.0

/sbin/ifconfig vlan99 mtu 1500

/sbin/ifconfig vlan99 up

同时你还可以在该文件中加入你的路由配置!

如/sbin/route add 192.168.0.0/16 192.168.0.1(这是我的路由,根据个人实际情况设置)

之后记得要用命令/etc/netstart restart重启网络。

在我重启网络之后,将思科三层交换机上的相应端口模式设置为trunk,同时并允许所有vlan通过,但我在服务器是还是ping不通交换机192.168.0.1、内网192.168.0.0/24网段和192.168.2.0/24网段的主机,从交换机也ping不通服务器。刚开始我一直怀疑是NAT服务器上的vlan网卡(即bge0)的问题,我甚至尝试将bge0设置为promiscuous(混杂)模式,但还是不行,后来我仔细检查了交换机端口fa0/6的配置:

interface FastEthernet0/6

description 159_7_bge0

switchport access vlan 3

switchport trunk encapsulation dot1q

switchport mode trunk

snmp trap mac-notification added

!

发现为什么端口上既有access模式,又有trunk模式,我怀疑之前端口是access模式,我在将其设置为trunk模式的的时候,并没有将access模式删除,于是我尝试在fa0/6上删除一下access模式,运行命令

no switchport access vlan 3

switchport trunk encapsulation dot1q

switchport mode trunk

之后端口上的配置为

interface FastEthernet0/6

description 159_7_bge0

switchport trunk encapsulation dot1q

switchport mode trunk

snmp trap mac-notification added

!

然后再从服务器上ping交换机地址192.168.0.1和内网地址192.168.2.0/24都能互相ping通。

之后,将内网段的主机网关指向192.168.0.69或者192.168.2.69就都能够接入互联网了。

4、编辑 rc.firewall

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/afb8a052a50d008d7f355895ee00a162.html