LVS(Linux 虚拟服务器)负载均衡器中的新虚拟 IP 上的 HTTP 端口已过滤

LVS(Linux 虚拟服务器)负载均衡器中的新虚拟 IP 上的 HTTP 端口已过滤

我在 CentOS 5.10 上继承了一个 Linux Virutal Server (LVS) 负载均衡器。它已经运行了很长时间,没有任何问题,不用担心。

现在,当我添加新的虚拟 IP(VIP)时,所有 HTTP 流量都会被“过滤”到该端口。

例如:这是现有 VIP 的 nmap 输出:

nmap 10.150.200.141
Starting Nmap 5.51.6 ( http://nmap.org ) at 2014-10-13 14:55 EDT
Nmap scan report for 10.150.200.141
Host is up (0.014s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
443/tcp  open  https
1556/tcp open  veritas_pbx
Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds

下面是我刚刚添加的 VIP 的 nmap 输出:

nmap -Pn 10.150.200.47
Starting Nmap 5.51.6 ( http://nmap.org ) at 2014-10-13 14:58 EDT
Nmap scan report for 10.150.200.47
Host is up (0.011s latency).
Not shown: 995 closed ports
PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   filtered http
111/tcp  open     rpcbind
443/tcp  filtered https
1556/tcp open     veritas_pbx
Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds

我应该注意,新 VIP 的配置是原始 VIP 的副本;我只是更改了名称、eth0 和 IP。

另外需要注意的是,新 VIP 中的真实服务器以前位于原始 VIP 中,并且在那里运行良好。现在我只需要将它们分离到自己的 VIP 上进行测试。

我尝试了另一个全新的 VIP 和不同的真实服务器(与前面提到的无关)并得到了相同的结果。

使用 iptables 输出更新:

/sbin/iptables -L --line -n -v
Chain INPUT (policy ACCEPT 106M packets, 16G bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 107M packets, 16G bytes)
num   pkts bytes target     prot opt in     out     source               destination

使用 ipvsadm 输出更新:

ipvsadm -L -n -t 10.150.200.47:80
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.150.200.47:80 wlc
  -> 10.150.200.247:80            Route   50     0          0

使用来自真实服务器的 iptables 输出进​​行更新:

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
3    ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0
5    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpts:161:162
6    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:161:162
10   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
11   REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

任何有关调试的想法或建议都将受到赞赏。

答案1

检查防火墙配置:

/sbin/iptables -L --line -n -v

您可能需要允许流量到达该 VIP。例如:

/sbin/iptables -I INPUT <line#> -d 10.150.200.47 -p tcp -m tcp --dport 80 -j ACCEPT 
/sbin/iptables -I INPUT <line#> -d 10.150.200.47 -p tcp -m tcp --dport 443 -j ACCEPT 

另外,验证真实服务器是否正在接受连接,例如:

$ sudo ipvsadm -L -n -t 10.150.200.47:80
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.150.200.47:80  wrr
  -> 192.168.100.11:80            Route   1      56         145       
  -> 192.168.100.12:80            Route   1      49         159       

编辑:添加要在真实服务器上检查的内容:

假设您使用直接路由,则需要在真实服务器的环回接口上配置虚拟 IP。当连接从负载平衡器转发到辅助服务器时,它将正常地在 eth0 上响应。此配置如下所示:

ifconfig lo:0 10.150.200.47 netmask 255.255.255.255

或者作为网络脚本:

$ cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.150.200.47
NETMASK=255.255.255.255
ONBOOT=yes

此外,您还需要通过 sysctl 更改内核参数:

# 不接受源路由
net.ipv4.conf.default.accept_source_route = 0

此外,您还需要更改 ARP 的发布方式和响应请求的方式(更多信息):

net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

另外,配置 rp 过滤:

net.ipv4.conf.eth0.rp_filter = 1 # 适用于 CentOS 5
或者
net.ipv4.conf.eth0.rp_filter = 2 # 适用于 CentOS 6+

默认的 rp_filter 设置在内核版本之间会有所不同,因此请确保选择正确的设置。 更多信息

相关内容