最近简单的配置了LVS-NAT模型,中间步骤还是比较多,做个笔记。本地使用Vmware,虚拟出三台centos6.4系统的机器,一台调度器(Director)和两台后端服务器(Realserver),均使用两张网卡,分别模拟内网(VM host-only)和公网(VM 桥接)。
NAT实验拓扑如下
内网: 192.168.10.0/24 (host-only)
外网: 172.16.200.0/24 (桥接)
配置过程
1. 调度器安装配置工具 ipvsadm
linux在2.4以上的内核版本中已经集成了lvs,我使用的CentOS6.4,已经是2.6内核版本,只需安装ipvsadm命令行管理工具,可以用yum快速安装。
1
2
3
|
[
root
@
lvs
~
]
# uname -r
2.6.32
-
358.el6.x86_64
[
root
@
lvs
~
]
# yum -y install ipvsadm
|
2. 调度器需要开启网卡的转发,修改内核参数 ip_forward
1
2
|
echo
1
>
/
proc
/
sys
/
net
/
ipv4
/
ip_forward
sysctl
-
p
|
grep
ip_forward
|
ip_forward 默认值0代表关闭,也可以编辑 /etc/sysctl.conf,修改 net.ipv4.ip_forward = 1,再重启network服务;
sysctl -p 用于查看是否修改成功。
3. 使用 ipvsadm 配置调度器
ipvsadm和lvs之间的关系,就像iptables和netfilter一样,前者是用户端配置的工具,后者是内核中对应的模块。仅添加即两步命令:
3.1 添加 Service
1
2
3
|
ipvsadm
-
A
-
t
172.16.200.100
:
80
-
s
sh
#-A 添加一个服务,-t 调度器IP:端口,-s 调度算法
#172.16.200.100 是调度器上的eth0,连接公网
|
3.2 添加 RealServer
1
2
3
4
|
ipvsadm
-
a
-
t
172.16.200.100
:
80
-
r
192.168.10.11
:
80
-
m
ipvsadm
-
a
-
t
172.16.200.100
:
80
-
r
192.168.10.12
:
80
-
m
#-a 添加一个后端服务器,-t 调度器IP:端口,-r 后端服务器IP:端口,-m LVS模式(m代表NAT)
#192.168.10.11|12 是realserver上的eth1,模拟内网
|
4. 双网卡的特殊路由
由于这个实验,采用了两张网卡(eth0外网、eth1内网),那么默认路由怎么走呢,假如我将两台后端服务器 ifcfg-eth1 中的GATEWAY指向调度器DIP(也就是调度器的eth1 192.168.10.10),那么生效后默认路由也就变为了走内网网关,route -n查看:
1
2
3
|
route
-
n
Destination
Gateway
Genmask
Flags
Metric
Ref
Use
Iface
0.0.0.0
192.168.10.10
0.0.0.0
UG
0
0
0
eth1
|
这样导致的直接后果是,yum和ssh等操作会断网,因为是通过桥接网卡(外网)传输的。
解决办法:在两台realserver上建立优先级不同的路由表,添加路由达到RIP指向DIP的效果
1
2
3
4
|
echo
"200 inside"
>>
/
etc
/
iproute2
/
rt_tables
ip
rule
add
from
$RIP
table
inside
ip
route
add
default
via
$DIP
dev
eth1
table
inside
# $RIP是realserver的eth1 192.168.10.11|12,$DIP是director的eth1 192.168.10.10
|
配置完成后 ipvsadm -ln 查询调度器当前状态.
1
2
3
4
5
6
7
8
9
|
[
root
@
lvs
~
]
# ipvsadm -ln
IP
Virtual
Server
version
1.2.1
(
size
=
4096
)
Prot
LocalAddress
:
Port
Scheduler
Flags
->
RemoteAddress
:
Port
Forward
Weight
ActiveConn
InActConn
TCP
172.16.200.100
:
80
sh
persistent
360
->
192.168.10.11
:
80
Masq
1
0
0
->
192.168.10.12
:
80
Masq
1
0
0
#ipvsadm -a 添加后端服务器时,没有加 -w 权重参数,默认Weight = 1
|
测试和注意事项
1. lvs是基于网络层数据包的转发,本身并不监听端口。realserver上可以安装httpd做测试,也可以用其他服务。
2. lvs的NAT是在TCP/IP层实现,实际没有用到iptables的nat表,实验前建议在调度器上清空防火墙(iptables -F)
3. 与iptables有些类似,ipvsadm命令是把配置直接加载到内存的,我并没有找到有静态的配置文件,但是-S和-R参数可以将lvs的配置导出/导入到指定文件中,
ipvsadm -S > /root/ipvs.config
ipvsadm -R < /root/ipvs.config
https://www.nando.cc/archives/93