home-gate
操作系统版本:Slackware 11.0
1 硬件
配置3块网卡,分别映射到/dev/vmnet1、/dev/vmnet3、/dev/vmnet2。
2 安装基础系统
只安装a/目录下的软件包,采用expert模式,全部安装。
配置lilo,安装在MBR中。
3 安装库文件
- l/zlib-1.2.3-i486-1
4 安装基本网络包
- 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
5 安装bind域名包
- n/bind-9.3.2_P1-i486-1
6 安装nfs包
- n/nfs-utils-1.0.10-i486-3
- n/portmap-5.0-i486-3
7 配置网络
执行netconfig配置网络:
# netconfig
netconfig只能配置第一块网卡,其余2块编辑/etc/rc.d/rc.inet1.conf手工设置。
8 设置文件缺省权限
系统初始的umaks为0022,将其修改为0027。
编辑/etc/profile,将umask一行修改为:
umask 027
9 安装补丁
使用nfs从develop获取更新包:
# mount -t nfs -o nolock 10.10.10.250:/newpkg /mnt # cd /mnt/packages # upgradepkg *.tgz # umount /mnt
10 防火墙配置
有关各个iptables脚本的详细内容见:Iptables脚本。
这里使用网关脚本rc.iptables-gate-novpn.ref,使用nfs从develop获取:
# mount -t nfs -o nolock 10.10.10.250:/newpkg /mnt # cd /etc/rc.d # cp /newpkg/rc.iptables-gate-novpn.ref rc.iptables # chmod a+x rc.iptables
修改/etc/rc.d/rc.S文件,把/newpkg/rc.S.ref模板内容粘贴到rc.S的末尾。
# umount /mnt
修改/etc/rc.d/rc.iptables脚本,去掉相关注释,使得:
- 内网可以访问外网的服务:ping、http(s)和ftp。
- 内网可以访问dmz。
- 外网可以访问dmz的服务:http(s)和ftp。
- 打开SNAT。
- 打开DNAT,重定向到home-server(10.10.20.10)。
其中DNAT只重定向http(s)和ftp:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport http -j DNAT --to 10.10.20.10 iptables -t nat -A PREROUTING -i eth1 -p tcp --dport https -j DNAT --to 10.10.20.10 iptables -t nat -A PREROUTING -i eth1 -p tcp --dport ftp -j DNAT --to 10.10.20.10
11 设置内核参数
有关脚本的详细内容见:Sysctl脚本。
# mount -t nfs -o nolock 10.10.10.250:/newpkg /mnt # cd /etc/rc.d # cp /newpkg/rc.sysctl.ref rc.sysctl # chmod a+x rc.sysctl
编辑/etc/rc.d/rc.M,把/newpkg/rc.M.ref模板内容粘贴到rc.inet2的前面。
# umount /mnt
打开ip转发功能:
# chmod +x /etc/rc.d/rc.ip_forward
12 配置域名服务
这里网关只作为一个缓存服务器,本身不负责域名解析。
编辑/etc/named.conf,增加如下内容:
options { ... forward only; forwarders { 172.18.0.20; }; ...
启动bind服务:
# cd /ec/rc.d/ # chmod a+x rc.bind
编辑/etc/rc.d/rc.iptables,允许内网用户DNS查询:
# enalbe dns query in eth0 iptables -A in-IN -p udp --dport domain -m state --state NEW -j ACCEPT
13 配置openvpn server
使用openvpn实现home网络和away网络之间的vpn连接。其中home-gate作为server,away-gate作为client。
从develop获得编译好的软件包并安装:
# mount -t nfs -o nolock 10.10.10.250:/newpkg /mnt # cd /mnt # installpkg lzo-2.02-i486-2_SBo.tgz # installpkg openvpn-2.0.9-i486-1_SBo.tgz # umount /mnt
根据openvpn提供的INSTALL文件中的指示完成测试。
详细的配置过程可参见openvpn.net,这里只列出步骤:
生成CA:
# cd /usr/doc/openvpn-2.0.9/easy-rsa # . ./vars # ./clean-all # ./build-ca (其中Common Name输入:sk11-home-gate)
生成server端的key:
# ./build-key-server sk11-home-server 其中(Common Name: sk11-home-server)
生成client端的key,可生成多个:
# ./build-key sk11-home-client1 (Common Name: sk11-home-client1) # ./build-key sk11-home-client2 (Common Name: sk11-home-client2) # ./build-key sk11-home-client3 (Common Name: sk11-home-client3) ...
生成Diffie Hellman parameters:
# ./build-dh
将生成的各个key拷贝到需要的地方,这里放在/etc/openvpn/server下:
# mkdir /etc/openvpn/server # cd keys # cp * /etc/openvpn/server/
编写server端配置文件,首先复制一份模板作为起点:
# cd /usr/doc/openvpn-2.0.9/sample-config-files # cp server.conf /etc/openvpn/server
修改配置:
# key文件名: cert sk11-home-server.crt key sk11-home-server.key # This file should be kept secret # 使用10.10.30.0/24作为vpn接口的地址空间: server 10.10.30.0 255.255.255.0 # 允许client访问home-work子网: push "route 10.10.10.0 255.255.255.0" # 允许client端的away-work子网访问vpn: client-config-dir ccd route 10.20.10.0 255.255.255.0
创建ccd目录和配置文件:
# cd /etc/openvpn/server # mkdir ccd # cd ccd # echo "iroute 10.20.10.0 255.255.255.0" > sk11-home-client1
针对openvpn,这里使用新的iptables脚本:
# cd /etc/rc.d # mv rc.iptables rc.iptables-gate-novpn # mount -t nfs -o nolock 10.10.10.250:/newpkg /mnt # cp /mnt/rc.iptables-gate-openvpn.ref rc.iptables-gate-openvpn # chmod a+x rc.iptables-gate-openvpn # ln -s rc.iptables-gate-openvpn rc.iptables # umount /mnt
编辑/etc/rc.d/rc.iptables,打开前面配置的各个规则,并增加:
- 打开udp 1194端口。
- 内网可以访问vpn的服务:ping。
- vpn可以访问内网的服务:ping。
启动测试:
# cd /etc/openvpn/server # openvpn server.conf
相应的客户端配置请参见away-get的配置。