用OpenBSD 4.7做网关/路由器(gateway/router)
发表于 : 2010-07-01 13:00
环境:
在老机dell GX150上安装OpenBSD 4.7作为网关。
有两个网络接口,dc0连接外部网络和xl0连接内部网络,dc0自动获取IP地址,xl0设置IP地址为192.168.8.1,创建文件 /etc/hostname.dc0和 /etc/hostname.xl0:
首先修改 /etc/sysctl.conf文件,将下面这行前面的注释去掉。
修改 /etc/dhcpd.conf文件:
上面的几个步骤设置完成后,内网的主机可以获得IP地址(例如我测试时内网仅有一台主机,自动获取的IP地址为192.168.8.32),说明DHCP服务器工作正常,但是内网主机并不能访问Internet,从内网主机ssh到网关上并运行lynx,发现作为网关的主机可以正常访问internet,问题在哪里呢?这里要说明一下,PF的NAT规则修改后到目前为止,OpenBSD的FAQ上并未对用OpenBSD 4.7做网关的部分进行修正,实际上这里必须依赖PF的NAT功能才能使内网正常访问Inetrnet,因为每个读者的实际情况的要求不同,我们这里仅就怎样设置简单的网关进行讨论,不涉及数据包过滤规则,如果你的网关兼做防火墙(数据包过滤),请您自行调整自己的规则 —— 实际上也很简单,和原来差不多,英文好的直接上OpenBSD主页,懒得费劲的可以自行参考中文版的PF指南。
为了今后的升级便利,我们自己再建立一个PF的配置文件gobsd.org——(纯属广告一下):
修改默认的PF配置文件名称:
编辑 /etc/rc.conf.local文件,加上如下内容, 以便重新启动后生效:
我们只需在原来的PF默认规则上添加上一条NAT规则, 因为这台主机就两个网络接口,我管理的网络也不多,就不设置宏了,直接用网络接口的名称,如果你自己要出教材,请自行修改规则,以便你的读者养成良好的习惯,我在这里就偷懒了:D:
在gobsd.org这个文件最后添加如下内容:
这里的dc0是连接外网的网络接口,xl0是连接内网的网络接口,这里展开说明一下这个规则的含义,将所有来自内网的通讯路由到连接外网的dc0接口上, 并允许这些通讯出站,因为自OpenBSD 4.1版本后,PF规则中内嵌了keep state功能,所以所有出站的通讯全记录内存中的状态表内,这样所有出站数据包的返回信息就可以没有阻碍地直接进站,因为PF查询状态表后确认这是由内网的某台主机发起的连接,就不会根据规则来过滤这些数据包,而是直接放行。最后解释一下:为什么最后这里的dc0加上了一个括号呢?如果你不加括号,开始没有问题,但是一旦连接外网接口的IP地址发生变化,PF则不会理会这个变化,直接向原IP地址NAT数据,这里加上括号即使外网卡分配的IP地址变化了,数据仍然会NAT连接外网的接口上。
好了,现在你可以重新启动计算机,或者简单地重新加载PF配置文件:
如果你的配置没有错误,现在内网的主机应该可以直接访问Internet了。
此外,你也无须单独设置用PF作为ftp代理了,尽管随意连接外网的FTP。
[email protected]
转载请注明作者名及原文出处
在老机dell GX150上安装OpenBSD 4.7作为网关。
有两个网络接口,dc0连接外部网络和xl0连接内部网络,dc0自动获取IP地址,xl0设置IP地址为192.168.8.1,创建文件 /etc/hostname.dc0和 /etc/hostname.xl0:
代码: 全选
# echo dhcp > /etc/hostname.dc0
# echo inet 192.168.8.1 255.255.255.0 NONE > /etc/hostname.xl0
首先修改 /etc/sysctl.conf文件,将下面这行前面的注释去掉。
代码: 全选
net.inet.ip.forwarding=1 # 1=Permit forwarding (routing) of IPv4 packets
修改 /etc/dhcpd.conf文件:
代码: 全选
# $OpenBSD: dhcpd.conf,v 1.2 2008/10/03 11:41:21 sthen Exp $
#
# DHCP server options.
# See dhcpd.conf(5) and dhcpd(8) for more information.
#
# Network: 192.168.1.0/255.255.255.0
# Domain name: gobsd.org
# Name servers: 192.168.1.3 and 192.168.1.5
# Default router: 192.168.1.1
# Addresses: 192.168.1.32 - 192.168.1.127
#
option domain-name "gobsd.org";
option domain-name-servers 192.168.1.254, 68.94.156.1, 68.94.157.1;
subnet 192.168.8.0 netmask 255.255.255.0 {
option routers 192.168.8.1;
range 192.168.8.32 192.168.8.127;
host static-client {
hardware ethernet 22:33:44:55:66:77;
fixed-address 192.168.8.200;
}
host pxe-client {
hardware ethernet 02:03:04:05:06:07;
filename "pxeboot";
next-server 192.168.8.1;
}
}
上面的几个步骤设置完成后,内网的主机可以获得IP地址(例如我测试时内网仅有一台主机,自动获取的IP地址为192.168.8.32),说明DHCP服务器工作正常,但是内网主机并不能访问Internet,从内网主机ssh到网关上并运行lynx,发现作为网关的主机可以正常访问internet,问题在哪里呢?这里要说明一下,PF的NAT规则修改后到目前为止,OpenBSD的FAQ上并未对用OpenBSD 4.7做网关的部分进行修正,实际上这里必须依赖PF的NAT功能才能使内网正常访问Inetrnet,因为每个读者的实际情况的要求不同,我们这里仅就怎样设置简单的网关进行讨论,不涉及数据包过滤规则,如果你的网关兼做防火墙(数据包过滤),请您自行调整自己的规则 —— 实际上也很简单,和原来差不多,英文好的直接上OpenBSD主页,懒得费劲的可以自行参考中文版的PF指南。
为了今后的升级便利,我们自己再建立一个PF的配置文件gobsd.org——(纯属广告一下):
代码: 全选
# cp /etc/pf.conf /etc/gobsd.org
修改默认的PF配置文件名称:
编辑 /etc/rc.conf.local文件,加上如下内容, 以便重新启动后生效:
代码: 全选
pf_rules=/etc/gobsd.org
我们只需在原来的PF默认规则上添加上一条NAT规则, 因为这台主机就两个网络接口,我管理的网络也不多,就不设置宏了,直接用网络接口的名称,如果你自己要出教材,请自行修改规则,以便你的读者养成良好的习惯,我在这里就偷懒了:D:
在gobsd.org这个文件最后添加如下内容:
代码: 全选
pass out on dc0 from xl0:network to any nat-to (dc0)
这里的dc0是连接外网的网络接口,xl0是连接内网的网络接口,这里展开说明一下这个规则的含义,将所有来自内网的通讯路由到连接外网的dc0接口上, 并允许这些通讯出站,因为自OpenBSD 4.1版本后,PF规则中内嵌了keep state功能,所以所有出站的通讯全记录内存中的状态表内,这样所有出站数据包的返回信息就可以没有阻碍地直接进站,因为PF查询状态表后确认这是由内网的某台主机发起的连接,就不会根据规则来过滤这些数据包,而是直接放行。最后解释一下:为什么最后这里的dc0加上了一个括号呢?如果你不加括号,开始没有问题,但是一旦连接外网接口的IP地址发生变化,PF则不会理会这个变化,直接向原IP地址NAT数据,这里加上括号即使外网卡分配的IP地址变化了,数据仍然会NAT连接外网的接口上。
好了,现在你可以重新启动计算机,或者简单地重新加载PF配置文件:
代码: 全选
# pfctl -f /etc/gobsd.org
如果你的配置没有错误,现在内网的主机应该可以直接访问Internet了。
此外,你也无须单独设置用PF作为ftp代理了,尽管随意连接外网的FTP。
[email protected]
转载请注明作者名及原文出处