6.6. 配置客户的 CIPE

成功地配置了 CIPE 服务器并测试了它的功能后,你现在就可以在客户机器上使用这种连接了。

CIPE 客户应该能够自动地连接和断开 CIPE 连接。因此,CIPE 包含内建的机制来为个别使用自定设置。例如,远程职员可以通过键入以下命令来连接到 LAN 上的 CIPE 设备:

/sbin/ifup cipcb0

设备应该自动出现;防火墙规则和选路信息也应该和连接一起配置。远程职员应该能够使用以下命令来终止连接:

/sbin/ifdown cipcb0

配置客户需要创建在设备被载入后需运行的脚本。服务配置本身可以通过用户创建的文件 /etc/sysconfig/network-scripts/ifcfg-cipcb0 来本地配置。这个文件中包含一些参数,如判定 CIPE 连接是否在引导时发生的参数;代表 CIPE 设备名称的参数等。以下是一个连接到 CIPE 服务器的远程客户的 ifcfg-cipcb0 文件:

DEVICE=cipcb0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

# This is the device for which we add a host route to our CIPE peer through.
# You may hard code this, but if left blank, we will try to guess from
# the routing table in the /etc/cipe/ip-up.local file.
PEERROUTEDEV=

# We need to use internal DNS when connected via cipe. 
DNS=192.168.1.254

CIPE 设备的名称是 cipcb0。CIPE 设备将会在引导时间被载入(通过 ONBOOT 字段配置),而且将不会使用一种引导协议(如 DHCP)来接收该设备的 IP 地址。PEERROUTEDEV 字段决定连接到客户的 CIPE 服务器设备名称。如果这个字段中没有指定任何设备,在设备被载入后就会为它决定一个。

如果你的内部网络是在防火墙背后,你需要设置规则来允许客户机器上的 CIPE 接口发送和接收 UDP 分组。关于为红帽企业 Linux 配置防火墙的信息请参阅第7章 。我们这个配置例子中使用了 iptables 规则。

注记注记
 

客户应该这样配置,因此所有被本地化的参数都被放在一个用户创建的叫做/etc/cipe/ip-up.local 的文件中。CIPE 会话被关闭后,应该使用 /etc/cipe/ip-down.local 来还原本地参数。

客户机器上的防火墙应该被配置接受 CIPE UDP 封装分组。规则的差距可能会很大,但是对 UDP 分组的基本接受对于 CIPE 连接来说却是必需的。以下的 iptables 规则允许连接到 LAN 上的远程客户机器进行 UDP CIPE 传输;最后一条规则添加了 IP 伪装来允许远程客户与 LAN 和互联网通信。

/sbin/modprobe iptables
/sbin/service iptables stop
/sbin/iptables -P INPUT DROP
/sbin/iptables -F INPUT
/sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.1
/sbin/iptables -A INPUT -j ACCEPT -i cipcb0
/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

你必须还在客户机器上添加用来像访问本地网络一样访问 CIPE 连接背后的节点的选路规则。这可以通过运行 route 命令来完成。在我们的例子中,客户工作站需要添加以下网络路线:

route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.1.2

以下显示了用于客户工作站的最终 /etc/cipe/ip-up.local 脚本:

#!/bin/bash -v
if [ -f /etc/sysconfig/network-scripts/ifcfg-$1 ] ; then
        . /etc/sysconfig/network-scripts/ifcfg-$1
else
        cat <<EOT | logger
Cannot find config file ifcfg-$1. Exiting.
EOF
        exit 1
fi

if [ -n ${PEERROUTEDEV} ]; then
        cat <<EOT | logger
Cannot find a default route to send cipe packets through!
Punting and hoping for the best.
EOT
        # Use routing table to determine peer gateway
        export PEERROUTEDEV=`/sbin/route -n | grep ^0.0.0.0 | head -n 1 \
           | awk '{ print $NF }'`

fi

####################################################
# Add The routes for the remote local area network #
####################################################

route add -host 10.0.1.2 dev $PEERROUTEDEV
route add -net 192.168.1.0 netmask 255.255.255.0 dev $1

####################################################
# IP TABLES Rules to restrict traffic              #
####################################################

/sbin/modprobe iptables
/sbin/service iptables stop
/sbin/iptables -P INPUT DROP
/sbin/iptables -F INPUT
/sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.2
/sbin/iptables -A INPUT -j ACCEPT -i $1
/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE