LVS中fwmark与iptables中的MARK之间的关系

更新时间:2024-02-02 16:48:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

LVS中fwmark与iptables中的MARK之间的关系

声明:转载注明出处:

http://hi.http://www.wodefanwen.com//wangpeng1314/blog/item/bcb45016a3557b10962b4329.html

作者:wangpeng168

目的:为了要使用LVS中ipvsadm命令的-f 选项,必须用到iptables中的MARK 系统:RH9 kernel2.4.20 (IPVS已经编译进内核)

一、Linux kernel 2.4.20 中netfilter内核模块配置以及移植 1、netfilter内核模块配置(该模块支持iptables命令): # cd /usr/src/linux-2.4.20

# make menuconfig #配置内核菜单

Networking options --->

IP: Netfilter Configuration ---> #这里只配置IPV4的,未配置IPV6 Connection tracking (required for masq/NAT) FTP protocol support IRC protocol support

Userspace queueing via NETLINK (EXPERIMENTAL) IP tables support (required for filtering/masq/NAT) limit match support

MAC address match support Packet type match support netfilter MARK match support Multiple port match support TOS match support ECN match support DSCP match support AH/ESP match support LENGTH match support TTL match support tcpmss match support Helper match support

Connection state match support Connection tracking match support Unclean match support (EXPERIMENTAL) Owner match support (EXPERIMENTAL) Packet filtering

REJECT target support MIRROR target support (EXPERIMENTAL) Full NAT Full NAT

MASQUERADE target support REDIRECT target support [*] NAT of local connections (READ HELP) Basic SNMP-ALG support (EXPERIMENTAL) Packet mangling TOS target support ECN target support

DSCP target support MARK target support LOG target support ULOG target support

TCPMSS target support ARP tables support ARP packet filtering

< > ipchains (2.2-style) support #支持 ipchains 模块与iptables无关,这里不编译

< > ipfwadm (2.0-style) support #支持 ipfwadm 模块与iptables无关,这里不编译

# make modules #编译模块 # make modules_install #安装模块

在/lib/modules下生成2.4.20目录,该目录下含有netfilter内核模块 2、移植netfilter内核模块

在目标系统的lib目录下创建相应目录

# mkdir -p modules/2.4.20/kernel/net/ipv4

再把对应的内核模块复制到对应的目录中 # cp -dpR

/lib/modules/2.4.20/kernel/net/ipv4/netfilter ./modules/2.4.20/kernel/net/ipv4/.

把/lib/modules/2.4.20/modules.dep 文件复制到目标系统相应目录下 # cp -dpR

/lib/modules/2.4.20/modules.dep ./modules/2.4.20/. #modules.dep 该文件存放着

#各个模块的依赖关系,可以

#被modprobe命令调用 二、移植iptables命令

# whereis iptables #查找iptables所在的目录 # cp -dpR /sbin/iptables 目标系统根目录/sbin/iptables # ldd /sbin/iptables #查找iptables所依赖的库 libdl.so.2 => /lib/libdl.so.2 (0x4001e000) libc.so.6 => /lib/libc.so.6 (0x40021000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 把依赖的库文件复制到目标系统相对应目录

# cp -dpR /lib/iptables 目标系统根目录/lib/iptables

打开转发功能,这个打开后,iptables可以做转发,ipvsadm也可以做LVS的NAT模式,

在该ip_forward功能开启后,经实践证明未对LVS的DR模式产生影响,所以一个LVS服务

可作DR与NAT两种模式的负载均衡。

#echo \在rc中修改,系统启动脚本中写入

三、iptables的处理动作MARK

1、iptables语法规则:iptables [-t table] command [match] [target/jump] 详细内容参看《Iptables 指南 1.1.19》:

http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html 2、MARK

设置mark值,这个值只能在本地的mangle表里使用,这个值是一个无符号的整数。

因为mark比较特殊,它不是包本身的一部分,而是在包穿越计算机的过程中由内核分配

的和它相关联的一个字段。简而言之:就是给数据包做了标记,但该标记不改变数据包,

在内核中给该数据包做了标记。

例子:

# iptables -t mangle -A PREROUTING -p tcp -d 192.168.1.110/32 --dport 80 -j MARK --set-mark 1

在mangle表的PREROUTING链中添加一个tcp协议的,目的IP地址为192.168.1.110掩码为32,

目的端口为80,处理动作为标记,设置标记的无符号整数为1的规则。

这样,只要是到192.168.1.110:80的tcp数据包都会标记成1,如果在

添加多个类似的规则,都 做成相同标记的话,就可以打包多个数据包(就是把多个数据包看成是一个类型的数据包)。如下:

# iptables -t mangle -A PREROUTING -p tcp -d 192.168.1.110/32 --dport 22 -j MARK --set-mark 2

# iptables -t mangle -A PREROUTING -p tcp -d 192.168.1.110/32 --dport 23 -j MARK --set-mark 2

把ssh和telnet服务端口,标记为2,把对22和23端口的数据包做同一种处理成为了可能。

这也就引出了ipvsadm命令的-f 选项对这种数据包做负载均衡的作用。 四、ipvsadm命令的-f 选项

-f --fwmark-service fwmark #经过iptables 标记过的服务类型。 例子:NAT 模式配置使用-f 选项 OS: Redhat 9 内核:2.4.20

Load Balancer: eth0: 192.168.1.110/32 (负载服务器对外VIP) eth1: 192.168.3.1/24 Realserver1: 192.168.3.2 (集群服务器) 掩码: 255.255.255.0 网关: 192.168.3.1 Realserver2: 192.168.3.3 (集群服务器) 掩码: 255.255.255.0 网关: 192.168.3.1

实验目的:在负载服务器上,配置LVS(NAT模式),做远程登陆服务器的集群。 实现最终用户访问负载服务器的对外VIP,负载服务器,将请求分发到集群下的服务器,

由集群服务器轮流提供ssh和telnet服务。

在Load Balancer上设置:

#echo \确保转发功能已打开 # iptables -t mangle -A PREROUTING -p tcp -d 192.168.1.110/32 --dport 22 -j MARK --set-mark 2

# iptables -t mangle -A PREROUTING -p tcp -d 192.168.1.110/32 --dport 23 -j MARK --set-mark 2

# iptables -t mangle -L PREROUTING #查看上述两条规则是否加入到mangle表的PREROUTING链中

# ipvsadm -A -f 2 -s rr #添加一个LVS服务,数据类型为fwmark为2的数据包,使用轮询策略

# ipvsadm -a -f 2 -r 192.168.3.2 -m -w 1 #添加真实服务器192.168.3.2到LVS(NAT模式)

#数据类型为fwmark为2的服务中

# ipvsadm -a -f 2 -r 192.168.3.3 -m -w 1 #添加真实服务器192.168.3.3到LVS(NAT模式)

#数据类型为fwmark为2的服务中

本文来源:https://www.bwwdw.com/article/8kvw.html

Top