11月 022013
 

接上次实验,这次使用二台机器做到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

1

node2

0
(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分钟,比较快,完成之后,直接重启机器,重新启动之后,可以看到已经加载新的内核,

2

说明内核编译成功,此时会发现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

3
node2

4
注意:1.两台服务器的pass的密码必须是一致的。2.我这里advskew都设置为100,关于advskew的一些设置大家可以看carp在FreeBSD的man
(5).高可用测试
重启机器后执行ifconfig如下
node1

5
node2

6
可以看出node1的carp0为master,node2的carp0为backup。说明此时数据是通过node1走的。
windows客户端网络配置

7
我使用esx做的实验,esx网络如下,LAN为虚拟端口组

8
测试1.客户端是否能够访问外网

9
测试通过
在node1上用iftop -i em0查看流量确实是重node1通过

10

用ifconfig查看carp0状态
node1

5

看到node1上carp0为mater

node2

15

node2的carp为backup
测试2.重启node1,测试客户端网络是否正常,这里重启node1来模拟一个节点故障。
重启node1,在windows客户端里

11

可以看到中间外网掉包2个,内网掉一个包后网络恢复正常,此时在node2上执行iftop -i em0

12

可以看到流量走的node2,在node2上查看carp0状态

13

node2的carp状态为master了,等node1起来后,查看node1上carp0的状态

14

测试通过

node1上carp0的状态为backup了。至此测试结束

5.后续

可以看到,利用carp已经实现了NAT网关的高可用,我这里没有添加防火墙规则,如果后续要添加规则记得同时在2台机器上执行,当然也可以利用rsync工具同步。至于具体的防火墙规则我这里就不写了,可以看FreeBSD Handbook有详细的操作指南。

打赏
 Posted by at 下午 4:08

  2 Responses to “FreeBSD高可用NAT网关安装笔记”

  1. 请问这个如何用远程syslog服务器来记录日志呢?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)