http 80
smtp 25
pop3 110
imap 143
dns udp 53
mysql 3306
ftp 多个端口 主被动模式
PORT: Server 21 <---------------------- client
20 ---------------------->
PASV Server 21 <---------------------- client
>1024 <----------------------
http + ssl 80 / 143端口 也是多端口(网上购物80,支付宝结帐时443)
实现FTP多端口解决方案
______________ Client CIP
|
|
DGW
|
| VIP
+-----------[Director]
| DIP
|
+
|
----------------------
| |
[rs1] [rs2] FTP PASV模式
Clinet:
CIP:110.0.0.1/24
DGW:
110.0.0.254
192.168.1.15
Director:
DIP:192.168.1.254/24
VIP:192.168.1.250/24
RealServer:
RIP:192.168.1.5
RIP:192.168.1.188
数据包走向:
1、 客户端发出数据包
sip:CIP sport:12345 smac:client_mac
dip:VIP dport:21 dmac:client_gateway_mac
每经过一个路由器,MAC地址都会改变
2、DGW这的数据包
sip:CIP sport:12345 smac:DGW_mac
dip:VIP dport:21 dmac:VIP_mac
3、 Director收到的数据包
sip:CIP sport:12345 smac:DGW_mac
dip:VIP dport:21 dmac:VIP_mac
改变为
sip:CIP sport:12345 smac:DIP_mac
dip:VIP dport:21 dmac:RIP_mac 调度,把目标MAC改为Real Server 的MAC
4、RS收到数据包 ifconfig lo:0 VIP netmask 255.255.255.255
5、RS给CLIENT回数据包,如下:
sip:VIP sport:21 smac:RIP_mac
dip:CIP dport:12345 dmac:DGW_mac
并且打开一个 大于1024 随机端口。告知给CLIENT,让其过来取数据 ,那么这样一个数据包的 IP /PORT分别是多少呢?
IP应该是VIP (因为客户端请求的地址是VIP)
PORT应该是大于1024
6、 客户端得知到服务器打开的大于1024的端口及IP时,则会发起一个新的TCP三次握手。找FTP服务器请求数据。
而这时,Director将收到client的数据传输的请求,而LVS程序刚只负责管理21端口。那么并不会把新的请求调度给Real Server
此时,会登录没问题,但是数据传输出问题。
|
也就是说,新的请求,也应该让Director上的LVS程序进行分发。
有人说,再加新的端口的规则 ipvsadm -A -t VIP:new_data_transfer_port -s rr
|
这样并不可行,lvs调度时,将不会连续调度,必须写到一个规则中
|
通过FW标记来做 :-)
Director:iptables -t mangle -A PREROUTING -p tcp -d VIP --dport 21 -j MARK --set-mark 2121
iptables -t mangle -A PREROUTING -p tcp -d VIP --dport 10000:20000 -j MARK --set-mark 2121(需要配置vsftpd监听的被动模式端口)
ipvsadm -A -f 2121 -s lc -p 600 这边有个小问题需要注意,关于调度算法问题。
ipvsadm -a -f 2121 -r RIP1 -g
ipvsadm -a -f 2121 -r RIP2 -g
-p 600 保持持久性连接
转载于:https://www.cnblogs.com/centos-python/articles/8522603.html