Http

在 LVS(Linux 虛擬伺服器)負載均衡器中過濾新虛擬 IP 上的 HTTP 埠

  • October 15, 2014

我在 CentOS 5.10 上繼承了 Linux 虛擬伺服器 (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

任何有關調試的想法或建議將不勝感激。

檢查防火牆配置:

/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 設置可能因核心版本而異,因此請確保選擇正確的設置。 更多資訊

引用自:https://serverfault.com/questions/636710