5.4. 服务器:配置网络

如果您正在构建一台只有一张网卡的服务器,我建议您考虑购买另一张网卡并重新布线您的网络。保持网络私密的最佳方法是将其放在独立的线路上。因此,如果您确实有两张网卡,您需要知道如何配置它们。我们将使用 eth0 作为外部接口,eth1 作为内部接口。

5.4.1. 配置接口

我们首先应该配置服务器的外部接口。您应该已经知道如何做到这一点,并且可能已经完成了。如果您没有,请立即执行。如果您不知道如何操作,请返回并阅读网络 HOWTO

现在我们启动内部接口。根据我们选择的数字,服务器的内部接口是 192.168.40.254。所以我们必须配置该接口。

对于 2.0 内核,请使用以下方法

# /sbin/ifconfig eth1 192.168.40.254 netmask 255.255.255.0 broadcast 192.168.40.255
# /sbin/route add -net 192.168.40.0 netmask 255.255.255.0 dev eth1

对于 2.2 内核,请使用以下方法

# /sbin/ifconfig eth1 192.168.40.254 netmask 255.255.255.0 broadcast 192.168.40.255

这样就启动了我们的基本接口。您现在可以与连接到服务器的两个本地网络上的机器通信。

5.4.2. 设置路由

我们现在可以与本地网络上的机器通信,但我们无法访问内部网络的其余部分。这需要更多几行代码。为了访问其他子网上的其他机器,我们需要一个路由,告诉流量去往 Cisco 路由器。这是那一行代码

# /sbin/route add -net 192.168.0.0 gw 192.168.254.254 netmask 255.255.0.0 dev eth1

该行代码告诉内核,任何发往 192.168.0.0 网络的流量都应该通过 eth1 发出,并且应该交给 Cisco。发往我们本地网络的流量仍然会到达它应该到达的地方,因为路由表是按网络掩码的大小排序的。如果我们的网络中有其他内部网络,我们将为每个网络添加类似上面的一行代码。

5.4.3. 制定过滤规则

现在我们可以访问我们可能需要访问的每台机器,我们需要编写防火墙过滤规则,以允许或拒绝通过 VPN 服务器的访问。

要使用 ipfwadm 设置规则,请像这样运行它

# /sbin/ipfwadm -F -f
# /sbin/ipfwadm -F -p deny
# /sbin/ipfwadm -F -a accept -S 192.168.40.0/24 -D 192.168.0.0/16
# /sbin/ipfwadm -F -a accept -b -S 192.168.10.0/24 -D 192.168.0.0/16
# /sbin/ipfwadm -F -a accept -b -S 192.168.11.0/24 -D 192.168.0.0/16

要使用 ipchains 设置规则,请像这样运行它

# /sbin/ipchains -F forward
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -j ACCEPT -s 192.168.40.0/24 -d 192.168.0.0/16
# /sbin/ipchains -A forward -j ACCEPT -b -s 192.168.10.0/24 -d 192.168.0.0/16
# /sbin/ipchains -A forward -j ACCEPT -b -s 192.168.11.0/24 -d 192.168.0.0/16

这告诉内核拒绝所有流量,除了来自 192.168.40.0/24 网络并 направленных 到 192.168.0.0/16 网络的流量。它还告诉内核,在 192.168.10.0/24 和 192.168.0.0/16 网络之间以及 192.168.11.0 网络之间的流量是被允许的。最后两个是双向规则,这对于使双向路由工作非常重要。

5.4.4. 路由

对于家庭用户来说,到这里一切都会正常工作。但是对于远程办公室,我们需要做一些路由。首先,我们需要告诉主路由器或 Cisco,远程办公室位于 VPN 服务器后面。因此,在 Cisco 上指定路由,告诉它将 направленных 到远程办公室的流量发送到 VPN 服务器。现在已经处理好了,我们必须告诉 VPN 服务器如何处理 направленных 到远程办公室的流量。为此,我们在服务器上运行 route 命令。唯一的问题是,为了使 route 命令工作,链路必须处于活动状态,如果链路断开,路由将丢失。解决方案是在客户端连接时添加路由,或者更简单地说,频繁运行 route 命令,因为多次运行它不是问题。因此,创建一个脚本并将其添加到您的 crontab 中,以便每隔几分钟运行一次,在脚本中,放入以下内容

/sbin/route add -net 192.168.11.0 gw 192.168.10.253 netmask 255.255.255.0
/sbin/route add -net 192.168.10.0 gw 192.168.11.253 netmask 255.255.255.0