Http
在 LVS(Linux 虛擬伺服器)負載均衡器中過濾新虛擬 IP 上的 HTTP 埠
我在 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 設置可能因核心版本而異,因此請確保選擇正確的設置。 更多資訊。