FreeBSD高可用NAT网关安装笔记
接上次实验,这次使用二台机器做到 NAT 网关的高可用,主要是借助Common Access Redundancy Protocol (CARP, 共用地址冗余协议).Common Access Redundancy Protocol, 或简称 CARP 能够使多台主机共享同一 IP 地址。 在某些配置中, 这样做可以提高可用性, 或实现负载均衡。
1.系统环境
网关虚拟机:
2 X FreeBSD 5.4 i368 1G 内存 20G 硬盘 双网卡 (carp 在 FreeBSD5.4 后面的版本中才被加入进来)
客户端虚拟机: Windows 2003 单网卡
2.IP 地址规划:
node1:
外网网卡 IP 地址:202.114.216.78⁄255.255.255.126 网关:202.114.216.126
内网网卡 IP 地址:192.168.100.1⁄255.255.255.0
node2:
外网网卡 IP 地址:202.114.216.79⁄255.255.255.126 网关:202.114.216.126
内网网卡 IP 地址:192.168.100.2⁄255.255.255.0
node1 和 node2 共用地址:192.168.100.3
windows 2003:
内网网卡 IP 地址:192.168.100.10⁄255.255.255.0 网关:192.168.100.3
3.安全策略:
作为网关,安全性非常重要,建议除了远程登录用的 SSH 外,尽可能多的停掉所有不相关服务。本安装文档只是最简单的配置,没有任何安全过滤规则,更多安全过滤规则需要根据实际情况补充。
4.具体步骤
以 node1 为例,注意二台机器 IP 设置等会有所不同
(1).安装操作系统
安装操作系统在之前的文档里已经详细叙述过了,可以参考上一篇文章FreeBSD 做 NAT 网关安装笔记,只要记得添加 src 和 ports 就成了,别的地方没特别注意的
(2).网络配置
em0 为外网网卡,em1 为内网网卡,确保机器可以正常访问外网
设置 em1 网卡地址
vi /etc/rc.conf
添加如下
ifconfig_em1="inet 192.168.100.1 netmask 255.255.255.0"
保存退出。
设置 ssh 允许 root 登陆
vi /etc/ssh/sshd_config
修改
PermitRootLogin yes
保存退出,并重启 ssh 服务
/etc/rc.d/sshd restart
重启服务器,重启后二台机器网络配置
node1
node2
(3).编译内核
重启后就可以 ssh 登陆到服务器,下面开始编译内核
进入内核配置目录
cd /usr/src/sys/i386/conf/
拷贝默认内核配置文件
cp GENERIC GATEWAY
编辑内核配置文件
vi GATEWAY
文件末尾添加如下
device carp options IPFIREWALL options IPFIREWALL_VERBOSE options IPDIVERT
保存退出
与上次不同,这次多添加了一个 device carp
重新编译
/usr/sbin/config GATEWAY cd ../compile/GATEWAY/ make depend make make install
大约需要 5 分钟,比较快,完成之后,直接重启机器,重新启动之后,可以看到已经加载新的内核,
说明内核编译成功,此时会发现 ssh 无法连接到服务器,那是因为防火墙默认拒绝所有连接,为了后续测试,安装下 iftop 工具
cd /usr/ports/net-mgmt/iftop/ make install clean rehash
iftop 的一些参数
-n 不查询 hostname
-N 不解析端口对应的服务名
-i interface 网卡名称
-B 显示 bytes/sec 而不是 bits/sec
(4).后续设置
通过 ifconfig 命令来创建 CARP 设备
ifconfig carp0 create
添加配置
/etc/rc.conf
添加如下
cloned_interfaces="carp0" ifconfig_carp0="inet 192.168.100.3 netmask 255.255.255.0 vhid 1 pass test123 advskew 100" ifconfig carp0 up linux_enable="YES" sendmail_enable="YES" sshd_enable="YES" gateway_enable="YES" natd_enable="YES" natd_interface="em0" firewall_enable="YES" firewall_type="open"
添加后二台机器完整的/etc/rc.conf 文件
node1
注意:1.两台服务器的 pass 的密码必须是一致的。2.我这里 advskew 都设置为 100,关于 advskew 的一些设置大家可以看carp 在 FreeBSD 的 man
(5).高可用测试
重启机器后执行 ifconfig 如下
node1
可以看出 node1 的 carp0 为 master,node2 的 carp0 为 backup。说明此时数据是通过 node1 走的。
windows 客户端网络配置
我使用 esx 做的实验,esx 网络如下,LAN 为虚拟端口组
测试通过
在 node1 上用 iftop -i em0 查看流量确实是重 node1 通过
用 ifconfig 查看 carp0 状态
node1
看到 node1 上 carp0 为 mater
node2
node2 的 carp 为 backup
测试 2.重启 node1,测试客户端网络是否正常,这里重启 node1 来模拟一个节点故障。
重启 node1,在 windows 客户端里
可以看到中间外网掉包 2 个,内网掉一个包后网络恢复正常,此时在 node2 上执行 iftop -i em0
可以看到流量走的 node2,在 node2 上查看 carp0 状态
node2 的 carp 状态为 master 了,等 node1 起来后,查看 node1 上 carp0 的状态
测试通过
node1 上 carp0 的状态为 backup 了。至此测试结束
5.后续
可以看到,利用 carp 已经实现了 NAT 网关的高可用,我这里没有添加防火墙规则,如果后续要添加规则记得同时在 2 台机器上执行,当然也可以利用 rsync 工具同步。至于具体的防火墙规则我这里就不写了,可以看FreeBSD Handbook有详细的操作指南。