home-gate
操作系统版本:Slackware 11.0
索引:
1.分区
- /dev/hda1, /boot, 100M
- /dev/hda2, swap, 256M
- /dev/hda3, /, 其他
2.安装一个基础系统
同开发机设置。
3.安装编辑器
安装vim。
同开发机,参见开发机[安装编辑器]
4.安装zlib
安装zlib,该压缩包会被openssl和openssh用到。
- l/zlib-1.2.3-i486-1
5.安装网络工具包
一些用到的网络工具:
- n/mailx-12.1-i486-1
- n/tcpip-0.17-i486-39
- n/iptables-1.3.5-i486-2
- n/tcpdump-3.9.4-i486-2
- n/openssl-0.9.8d-i486-1
- n/openssh-4.4p1-i486-1
6.设置文件缺省权限
系统初始的umaks为0022,这个对于安全要求比较高的网关机来说,有点过宽了。将其修改为0027。
编辑/etc/profile,将umask一行修改为:
umask 027
7.配置网络
执行netconfig配置网络,安装虚拟机网卡模块。
机器名:home-gate
域名:copyleft.net
IP地址:
- eth0:10.10.20.1/24
- eth1:192.168.0.50/24
路由:
- GETWAY:192.168.0.1
使用ping和tcpdump命令测试网络配置的正确性。
8.防火墙配置
从开发机获得防火墙脚本模板,home-gate作为网关,使用的是网关模板rc.iptables-gate-novpn.ref,因为现在还没有配置vpn。
# scp 10.10.20.100:/newpkg/rc.iptables-gate-novpn.ref . # scp 10.10.20.100:/newpkg/rc.S.ref .
把模板脚本放到/etc/rc.d/目录下,改名为rc.iptables:
# mv rc.iptables-gate-novpn.ref /etc/rc.d/rc.iptables
修改/etc/rc.d/rc.S文件,在末尾添加运行rc.S.ref的内容。
模板rc.iptables-gate-novpn.ref的说明如下:
#!/bin/sh # Start/stop/restart my iptables configuration for gate. # # 网关作为一个网络的枢纽,一般都是有多个接口的,比如内网、外网、dmz接口, # 有的还配有专门的管理接口mng,虽然当前的测试环境中,home-gate只有两个接 # 口,但还是按多接口的规格进行设计。 # in: eth0(内网用eth0接口) # out: eth1, ppp+(外网用eth1接口,如果使用了PPP,对应接口也属于外网) # dmz: eth2(dma网络使用eth2) # mng: eth3(管理网络使用eth3接口) start() { ## filter table begin: iptables -F # 缺省策略设置为禁止一切数据: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # 对于本地loopback接口,不做限制: iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # 虽然分片包有存在的理由,但在当今的网络现状下,已经很少了。分片出现更多 # 的是源于攻击,所以禁止分片包: iptables -A INPUT -f -j DROP iptables -A FORWARD -f -j DROP # 允许网关可以访问任何地方,这种做法是值得商榷的。这里如此做是为了方便测 # 试,实际情况还得细细琢磨。 iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED \ -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 针对各种网络数据流向定义相应的链: iptables -N in-IN(处理从内网进入网关的数据) iptables -N in-out-FOR(处理内网经过网关进入外网的数据) iptables -N in-dmz-FOR(处理内网经过网关进入dmz的数据) iptables -N in-mng-FOR(处理内网经过网关进入mng的数据) iptables -N in-OUT(处理从网关进入内网的数据) iptables -N out-IN(处理从外网进入网关的数据) iptables -N out-in-FOR(处理外网经过网关进入内网的数据) iptables -N out-dmz-FOR(处理外网经过网关进入dmz的数据) iptables -N out-mng-FOR(处理外网经过网关进入mng的数据) iptables -N out-OUT(处理从网关进入外网的数据) iptables -N dmz-IN(处理从dmz进入网关的数据) iptables -N dmz-in-FOR(处理dmz经过网关进入内网的数据) iptables -N dmz-out-FOR(处理dmz经过网关进入外网的数据) iptables -N dmz-mng-FOR(处理dmz经过网关进入mng的数据) iptables -N dmz-OUT(处理从网关进入dmz的数据) iptables -N mng-IN(处理从mng进入网关的数据) iptables -N mng-in-FOR(处理mng经过网关进入内网的数据) iptables -N mng-out-FOR(处理mng经过网关进入外网的数据) iptables -N mng-dmz-FOR(处理mng经过网关进入dmz的数据) iptables -N mng-OUT(处理从网关进入mng的数据) # 根据如上说明,把数据定义到相应的链,以后就不用再关心具体的网络接口, # 可以更专注于功能上: iptables -A INPUT -i eth0 -j in-IN iptables -A FORWARD -i eth0 -o eth1 -j in-out-FOR iptables -A FORWARD -i eth0 -o ppp+ -j in-out-FOR iptables -A FORWARD -i eth0 -o eth2 -j in-dmz-FOR iptables -A FORWARD -i eth0 -o eth3 -j in-mng-FOR iptables -A OUTPUT -o eth0 -j in-OUT iptables -A INPUT -i eth1 -j out-IN iptables -A INPUT -i ppp+ -j out-IN iptables -A FORWARD -i eth1 -o eth0 -j out-in-FOR iptables -A FORWARD -i ppp+ -o eth0 -j out-in-FOR iptables -A FORWARD -i eth1 -o eth2 -j out-dmz-FOR iptables -A FORWARD -i ppp+ -o eth2 -j out-dmz-FOR iptables -A FORWARD -i eth1 -o eth3 -j out-mng-FOR iptables -A FORWARD -i ppp+ -o eth3 -j out-mng-FOR iptables -A OUTPUT -o eth1 -j out-OUT iptables -A OUTPUT -o ppp+ -j out-OUT iptables -A INPUT -i eth2 -j dmz-IN iptables -A FORWARD -i eth2 -o eth0 -j dmz-in-FOR iptables -A FORWARD -i eth2 -o eth1 -j dmz-out-FOR iptables -A FORWARD -i eth2 -o ppp+ -j dmz-out-FOR iptables -A FORWARD -i eth2 -o eth3 -j dmz-mng-FOR iptables -A OUTPUT -o eth2 -j dmz-OUT iptables -A INPUT -i eth3 -j mng-IN iptables -A FORWARD -i eth3 -o eth0 -j mng-in-FOR iptables -A FORWARD -i eth3 -o eth1 -j mng-out-FOR iptables -A FORWARD -i eth3 -o ppp+ -j mng-out-FOR iptables -A FORWARD -i eth3 -o eth2 -j mng-dmz-FOR iptables -A OUTPUT -o eth3 -j mng-OUT # 从现在开始,就可以根据需要定义具体的规则。 # 比如,只允许使用ssh连接网关,而且只能在内网接口和mng接口,则如下定义: # (相应的应答数据已经包含在前面: # "iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED \ -j ACCEPT" # 里了,所以这里没有再定义对应的in-OUT和mng-OUT。) iptables -A in-IN -p tcp --dport ssh -m state \ --state NEW -j ACCEPT iptables -A mng-IN -p tcp --dport ssh -m state \ --state NEW -j ACCEPT # 除了外网,允许其余网络的机器给网关发ping数据包: iptables -A in-IN -p icmp --icmp-type echo-request -j ACCEPT iptables -A dmz-IN -p icmp --icmp-type echo-request -j ACCEPT iptables -A mng-IN -p icmp --icmp-type echo-request -j ACCEPT # other # 外网访问本地网络一般都是受限的,网关要阻止外网对内网的肆意访问,但对 # 内网访问外网,外网返回的应答数据则要允许通过,相应的,内网与外网的正 # 常数据流也要允许通过。 # 此外,一些关联(related)的连接也要允许。最明显的如ftp协议,在ftp的port # 模式下,外网服务器要通过自身ftp-data端口连接内网机器的某个端口进行数据 # 传输,这就是外网对内网的related;在ftp的passive模式下,内网要连接外网 # 某个临时端口进行数据传输,这就是内网对外网的related。 iptables -A out-in-FOR -m state --state ESTABLISHED,RELATED \ -j ACCEPT iptables -A in-out-FOR -m state --state ESTABLISHED,RELATED \ -j ACCEPT # 内网对外网的访问,比如允许内网ping外网的机器: iptables -A in-out-FOR -p icmp --icmp-type echo-request \ -j ACCEPT ## filter table end. # 以上部分只是filter部分的内容,如果有NAT方面的需求,则在下面接着定义。 ## nat table begin: #iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE ## nat table end. } resume_all() { iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT } stop() { ## filter table begin: iptables -F # 删除所有定义的链: iptables -X in-IN iptables -X in-out-FOR iptables -X in-dmz-FOR iptables -X in-mng-FOR iptables -X in-OUT iptables -X out-IN iptables -X out-in-FOR iptables -X out-dmz-FOR iptables -X out-mng-FOR iptables -X out-OUT iptables -X dmz-IN iptables -X dmz-in-FOR iptables -X dmz-out-FOR iptables -X dmz-mng-FOR iptables -X dmz-OUT iptables -X mng-IN iptables -X mng-in-FOR iptables -X mng-out-FOR iptables -X mng-dmz-FOR iptables -X mng-OUT ## filter table end. ## nat table begin: iptables -t nat -F ## nat table end. } case "$1" in 'start') start ;; 'stop') stop resume_all ;; 'restart') stop start ;; *) echo "usage $0 start|stop|restart" esac
在将要进行的测试中,需要允许内网机器访问外网的http和ftp服务,故在start()函数中增加如下规则:
# enable in access out with http,ftp iptables -A in-out-FOR -p tcp --dport http -m state \ --state NEW -j ACCEPT iptables -A in-out-FOR -p tcp --dport https -m state \ --state NEW -j ACCEPT iptables -A in-out-FOR -p tcp --dport ftp -m state \ --state NEW -j ACCEPT
测试分NAT和非NAT两种进行。当要使用NAT时,把start()函数末尾的如下规则取消注释即可:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
要了解其他相关信息,可参见开发机[防火墙配置]
9.设置内核参数
从开发机获得模板rc.sysctl.ref:
# scp 10.10.20.100:/newpkg/rc.sysctl.ref . # scp 10.10.20.100:/newpkg/rc.M.ref .
把模板文件复制到/etc/rc.d/目录下,改名为rc.sysctl:
# mv rc.sysctl.ref /etc/rc.d/rc.sysctl
编辑/etc/rc.d/rc.M,将rc.M.ref内容加到rc.inet2的前面。
要了解详细信息,可参见开发机[设置一些内核参数]
除了上述参数,网关做为交通枢纽,还需要打开转发功能,这需要设置内核参数/proc/sys/net/ipv4/ip_forward。Slackware本身已经提供了一个脚本/etc/rc.d/rc.ip_forward,所以没有在rc.sysctl中添加这个参数。
要打开转发功能,只需要使rc.ip_forward脚本可执行:
# chmod u+x /etc/rc.d/rc.ip_forward
10.安装grub
同home-work设置。
11.安装新内核
同home-work设置。
12.配置ipsec
(1).安装内核
从开发机获得支持ipsec的内核和软件包:
# scp 10.10.20.100:/newpkg/kernel/2.4.34.2-thin-klips/* .
内核的安装和引导配置与前面普通内核无二,注意不要覆盖原来的内核模块目录。
此外,多安装一个软件包:
# installpkg openswan-2.4.7-i386-1.tgz
重启,看新内核是否正常工作。
执行如下命令:
# ipsec --version Linux Openswan 2.4.7 (klips) See `ipsec --copyright` for copyright information.
显示如上,则表示内核安装正确。
(2).安装额外软件包
openswan的运行需要一些软件包的支持:
- n/iproute2-2.6.16_060323-i486-1
- d/perl-5.8.8-i486-3
- l/glibc-2.3.6-i486-6(用到locale)
- n/bind-9.3.2_P1-i486-1(这里可选)
(3).初始运行
虽然现在还没有具体配置,但已经可以启动ipsec了,可以借此检验一下配置环境是否正确:
# /etc/rc.d/ipsec start ipsec_setup: Starting Openswan IPsec 2.4.7... ipsec_setup: WARNING: changing route filtering on eth1 (changing /proc/sys/net/ipv4/conf/eth1/rp_filter from 1 to 0)
上面的警告跟我们在sysctl中配置的一个参数有关,ipsec会自动关闭它,不影响。
执行如下命令进行检查:
# ipsec verify Checking your system to see if IPsec got ...: Version check and ipsec on-path [OK] Linux Openswan 2.4.7 (klips) Checking for IPsec support in kernel [OK] Checking for RSA private key (/etc/ipsec.secrets) [OK] Checking that pluto is running [OK] Two or more interfaces found, checking IP forwarding [OK] Checking NAT and MASQUERADEing [OK] Checking for 'ip' command [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
检查完毕,关闭ipsec:
# /etc/rc.d/ipsec stop ipsec_setup: Stopping Openswan IPsec...
(4).配置tunnels
这里配置两条tunnel,一个是host-to-host,用于home-gate和away-gate两个网关之间的通信;另一个是subnet-to-subnet,用于home子网和away子网之间的通信。
在配置文件/etc/ipsec.conf中添加如下内容:
conn host-to-host left=192.168.0.50 right=172.16.0.50 type=tunnel leftrsasigkey=0sAQONhe ...... rightrsasigkey=0sAQNs7y9/ykc2...... auto=start conn subnet-to-subnet left=192.168.0.50 leftsubnet=10.10.20.0/24 right=172.16.0.50 rightsubnet=10.10.40.0/24 type=tunnel leftrsasigkey=0sAQONhe ...... rightrsasigkey=0sAQNs7y9/ykc2...... auto=start
配置文件写好后,传到away-gate上,两边要一致。
其中的leftrsasigkey在home-gate上获得,使用如下命令:
# ipsec showhostkey --left
rightrsasigkey在away-gate上获得,使用命令:
# ipsec showhostkey --right
这里left/right都是获得本机的公钥,实际内容是一样的。
把输出的公钥内容(很长)粘贴到ipsec.conf中。
(5).修改防火墙
之前的iptables脚本并没有考虑vpn功能,现在要增加对ipsec的支持,从开发机获得新模板rc.iptables-gate.ref:
# cd /etc/rc.d # mv rc.iptables rc.iptables-novpn # scp 10.10.20.100:/newpkg/rc.iptables-gate.ref . # mv rc.iptables-gate.ref rc.iptables
两个模板最大的不同,就在于启动ipsec后,会增加新的网络接口如ipsec0、ipsec1等,从而需要针对这些新接口制定规则。
另一个重大区别是,ipsec需要开放UDP 500端口和ESP(50)协议。
同时也启用NAT,因为现在模拟的是两个通过vpn连接起来的内部网络,而这些内部网络地址是不会出现在外网中的。
下面是模板rc.iptables-gate.ref的内容:(与rc.iptables-gate-novpn.ref相同的地方不再注释)
#!/bin/sh # Start/stop/restart my iptables configuration for gate. # # interface summary: # in: eth0 # out: eth1, ppp+ # dmz: eth2 # mng: eth3 # vpn: ipsec+(新增的网络接口) start() { ## filter table begin: iptables -F # default policy iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # enable all lookback packets iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # disable all fragment packets iptables -A INPUT -f -j DROP iptables -A FORWARD -f -j DROP # enable I access anywhere and response messages iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED \ -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED \ -j ACCEPT # 开放UDP500端口和ESP(50):(这里使用地址和端口加强安全性) iptables -A INPUT -i eth1 -p udp -s 172.16.0.50 --sport 500 \ -d 192.168.0.50 --dport 500 -m state --state NEW -j ACCEPT iptables -A INPUT -i eth1 -p 50 -s 172.16.0.50 -d 192.168.0.50 \ -m state --state NEW -j ACCEPT # 针对vpn增加了对应的链: iptables -N in-IN iptables -N in-out-FOR iptables -N in-dmz-FOR iptables -N in-mng-FOR iptables -N in-vpn-FOR(新增) iptables -N in-OUT iptables -N out-IN iptables -N out-in-FOR iptables -N out-dmz-FOR iptables -N out-mng-FOR iptables -N out-vpn-FOR(新增) iptables -N out-OUT iptables -N dmz-IN iptables -N dmz-in-FOR iptables -N dmz-out-FOR iptables -N dmz-mng-FOR iptables -N dmz-vpn-FOR(新增) iptables -N dmz-OUT iptables -N mng-IN iptables -N mng-in-FOR iptables -N mng-out-FOR iptables -N mng-dmz-FOR iptables -N mng-vpn-FOR(新增) iptables -N mng-OUT iptables -N vpn-IN(新增) iptables -N vpn-in-FOR(新增) iptables -N vpn-out-FOR(新增) iptables -N vpn-dmz-FOR(新增) iptables -N vpn-mng-FOR(新增) iptables -N vpn-OUT(新增) # jump to new chains iptables -A INPUT -i eth0 -j in-IN iptables -A FORWARD -i eth0 -o eth1 -j in-out-FOR iptables -A FORWARD -i eth0 -o ppp+ -j in-out-FOR iptables -A FORWARD -i eth0 -o eth2 -j in-dmz-FOR iptables -A FORWARD -i eth0 -o eth3 -j in-mng-FOR iptables -A FORWARD -i eth0 -o ipsec+ -j in-vpn-FOR(新增) iptables -A OUTPUT -o eth0 -j in-OUT iptables -A INPUT -i eth1 -j out-IN iptables -A INPUT -i ppp+ -j out-IN iptables -A FORWARD -i eth1 -o eth0 -j out-in-FOR iptables -A FORWARD -i ppp+ -o eth0 -j out-in-FOR iptables -A FORWARD -i eth1 -o eth2 -j out-dmz-FOR iptables -A FORWARD -i ppp+ -o eth2 -j out-dmz-FOR iptables -A FORWARD -i eth1 -o eth3 -j out-mng-FOR iptables -A FORWARD -i ppp+ -o eth3 -j out-mng-FOR iptables -A FORWARD -i eth1 -o ipsec+ -j out-vpn-FOR(新增) iptables -A FORWARD -i ppp+ -o ipsec+ -j out-vpn-FOR(新增) iptables -A OUTPUT -o eth1 -j out-OUT iptables -A OUTPUT -o ppp+ -j out-OUT iptables -A INPUT -i eth2 -j dmz-IN iptables -A FORWARD -i eth2 -o eth0 -j dmz-in-FOR iptables -A FORWARD -i eth2 -o eth1 -j dmz-out-FOR iptables -A FORWARD -i eth2 -o ppp+ -j dmz-out-FOR iptables -A FORWARD -i eth2 -o eth3 -j dmz-mng-FOR iptables -A FORWARD -i eth2 -o ipsec+ -j dmz-vpn-FOR(新增) iptables -A OUTPUT -o eth2 -j dmz-OUT iptables -A INPUT -i eth3 -j mng-IN iptables -A FORWARD -i eth3 -o eth0 -j mng-in-FOR iptables -A FORWARD -i eth3 -o eth1 -j mng-out-FOR iptables -A FORWARD -i eth3 -o ppp+ -j mng-out-FOR iptables -A FORWARD -i eth3 -o eth2 -j mng-dmz-FOR iptables -A FORWARD -i eth3 -o ipsec+ -j mng-vpn-FOR(新增) iptables -A OUTPUT -o eth3 -j mng-OUT iptables -A INPUT -i ipsec+ -j vpn-IN(新增) iptables -A FORWARD -i ipsec+ -o eth0 -j vpn-in-FOR(新增) iptables -A FORWARD -i ipsec+ -o eth1 -j vpn-out-FOR(新增) iptables -A FORWARD -i ipsec+ -o ppp+ -j vpn-out-FOR(新增) iptables -A FORWARD -i ipsec+ -o eth2 -j vpn-dmz-FOR(新增) iptables -A FORWARD -i ipsec+ -o eth3 -j vpn-mng-FOR(新增) iptables -A OUTPUT -o ipsec+ -j vpn-OUT(新增) # enable ssh for management in eth0,eth3 iptables -A in-IN -p tcp --dport ssh -m state \ --state NEW -j ACCEPT iptables -A mng-IN -p tcp --dport ssh -m state \ --state NEW -j ACCEPT # enalbe LAN ping me iptables -A in-IN -p icmp --icmp-type echo-request -j ACCEPT iptables -A dmz-IN -p icmp --icmp-type echo-request -j ACCEPT iptables -A mng-IN -p icmp --icmp-type echo-request -j ACCEPT # enalbe vpn ping me(新增) #iptables -A vpn-IN -p icmp --icmp-type echo-request -j ACCEPT # other # enable out respond in iptables -A out-in-FOR -m state --state ESTABLISHED,RELATED \ -j ACCEPT iptables -A vpn-in-FOR -m state --state ESTABLISHED,RELATED \ -j ACCEPT(新增) iptables -A in-out-FOR -m state --state ESTABLISHED,RELATED \ -j ACCEPT iptables -A in-vpn-FOR -m state --state ESTABLISHED,RELATED \ -j ACCEPT(新增) # enable in ping out iptables -A in-out-FOR -p icmp --icmp-type echo-request -j ACCEPT # enable in ping vpn(新增) #iptables -A in-vpn-FOR -p icmp --icmp-type echo-request -j ACCEPT # enable vpn ping in(新增) #iptables -A vpn-in-FOR -p icmp --icmp-type echo-request -j ACCEPT ## filter table end. ## nat table begin:(打开NAT) iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE ## nat table end. } resume_all() { # enable all iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT } stop() { ## filter table begin: iptables -F # remove all chains iptables -X in-IN iptables -X in-out-FOR iptables -X in-dmz-FOR iptables -X in-mng-FOR iptables -X in-vpn-FOR iptables -X in-OUT iptables -X out-IN iptables -X out-in-FOR iptables -X out-dmz-FOR iptables -X out-mng-FOR iptables -X out-vpn-FOR iptables -X out-OUT iptables -X dmz-IN iptables -X dmz-in-FOR iptables -X dmz-out-FOR iptables -X dmz-mng-FOR iptables -X dmz-vpn-FOR iptables -X dmz-OUT iptables -X mng-IN iptables -X mng-in-FOR iptables -X mng-out-FOR iptables -X mng-dmz-FOR iptables -X mng-vpn-FOR iptables -X mng-OUT iptables -X vpn-IN iptables -X vpn-in-FOR iptables -X vpn-out-FOR iptables -X vpn-dmz-FOR iptables -X vpn-mng-FOR iptables -X vpn-OUT ## filter table end. ## nat table begin: iptables -t nat -F ## nat table end. } case "$1" in 'start') start ;; 'stop') stop resume_all ;; 'restart') stop start ;; *) echo "usage $0 start|stop|restart" esac
(6).修改route的路由表
由于启动了NAT,所以route上增加的两条路由可以取消了。详情可以参见:route[配置网络]
(7).启动tunnels
现在可以启动了,在home-gate和away-gate上执行:
# /etc/rc.d/ipsec start
启动完毕,查看tunnels状态:
# ipsec eroute 0 10.10.20.0/24 -> 10.10.40.0/24 => tun0x1007@172.16.0.50 0 192.168.0.50/32 -> 172.16.0.50/32 => tun0x1008@172.16.0.50
正常会显示两条隧道。
然而,现在虽然有了加密通道,却几乎啥也不能做,因为防火墙阻止了访问。下面,需要针对具体的应用增加相应的iptables规则。
例1
在host-to-host隧道中,要测试home-gate和away-gate之间相互ping,需要对rc.iptables中的这条规则取消注释:
# enalbe vpn ping me iptables -A vpn-IN -p icmp --icmp-type echo-request -j ACCEPT
该规则在subnet-to-subnet隧道中away-work ping home-gate的内网地址10.10.20.1时也用到。
例2
在subnet-to-subnet隧道中,让away-work ping home-work,则需要打开这条规则:
# enable vpn ping in iptables -A vpn-in-FOR -p icmp --icmp-type echo-request -j ACCEPT
反过来,home-work ping away-work,则需要:
# enable in ping vpn iptables -A in-vpn-FOR -p icmp --icmp-type echo-request -j ACCEPT
简单的说就是让网关转发相应的数据。
注意,home-gate和away-gate是对称的,上述的修改需要在两个网关上都进行才有效。
可以使用tcpdump监视各个网络接口,加深对整个过程的理解。
13.配置域名服务
在网关中运行DNS服务不是一个好主意。最好在本地子网有一台专门的域名服务器。这里配置的DNS只是一个高速缓存服务器,代理客户机进行域名解析工作。这样,客户机可以把网关和DNS统一设置为一个地址,方便使用。
(1).软件包
如果在上一步ipsec中没有安装bind软件包,则进行安装:
- bind-9.3.2_P1-i486-1
(2).主配置
软件包提供的/etc/named.conf就是针对一个缓存服务器的,可以完全满足要求,不需要修改。内容如下:
options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // // a caching only nameserver config // zone "." IN { type hint; file "caching-example/named.ca"; }; zone "localhost" IN { type master; file "caching-example/localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "caching-example/named.local"; allow-update { none; }; };
(3).根服务器文件
作为实际的服务器,可以不修改named.ca文件,直接使用,必要时到互联网下载最新的版本即可。
也可以把根服务器设置为ISP提供的域名服务器,如ADSL上网中电信提供的地址。由于测试环境没有实际与互联网连接,所以采用这种方式,把out-server的域名服务器作为根服务器。
编辑/var/named/catching-example/named.ca:
. 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 172.16.0.10 ; ; End of File
只保留一个根服务器:172.16.0.10,就是out-server。
(4).其他设置
配置完毕,使rc.bind脚本可执行:
# chmod u+x /etc/rc.d/rc.bind
现在可以取消/etc/hosts中的ip地址对应关系了:
#10.10.20.1 home-gate.copyleft.net home-gate
编辑/etc/resolv.conf,该文件可以为空,为方便使用,可增加一行:
search copyleft.net
启动bind服务器,执行nslookup进行解析测试,看工作是否正常。
(5).防火墙设置
修改防火墙配置/etc/rc.d/rc.iptables,为本地网络提供dns解析服务:
# enable domain iptables -A in-IN -p udp --dport domain -m state \ --state NEW -j ACCEPT