ZBLOG

LVS TUN模式,异常的服务器能收到ipip的包,但是终端没有收到回包,如何排查

这是一个典型的LVS TUN模式网络问题,排查步骤如下:

1. 检查Real Server的IPIP隧道状态

# 检查tunl0接口状态
ip addr show tunl0

# 检查IPIP隧道配置
ip tunnel show

# 检查路由表
route -n
ip route show table all | grep tunl0

2. 验证数据包流向

在Real Server上抓包:

# 监听tunl0接口的流量
tcpdump -i tunl0 -nn host <VIP>

# 同时监听物理接口出去的包
tcpdump -i eth0 -nn host <Client_IP> and port <Port>

在Director上抓包:

tcpdump -i any -nn host <VIP> or host <Client_IP>

3. 检查Real Server的回包路由

# 查看回包路由策略
ip rule show
ip route show table local

# 特别检查local路由表是否有VIP
ip route show table local | grep <VIP>

# 应该有这样的条目:
# local <VIP> dev lo scope host

4. 验证ARP设置和防火墙

# 检查ARP抑制设置(TUN模式也需要)
cat /proc/sys/net/ipv4/conf/tunl0/arp_ignore
cat /proc/sys/net/ipv4/conf/tunl0/arp_announce

# TUN模式推荐设置:  
echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce  
echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

# 检查防火墙规则  
iptables -L -n -v  
iptables -t nat -L -n -v

# 临时关闭防火墙测试  
iptables -F && iptables -t nat -F  
service iptables stop   # CentOS6  
systemctl stop firewalld # CentOS7  
ufw disable            # Ubuntu  

##5.调试内核参数和连接跟踪

#启用连接跟踪调试  
echo1>/proc/sys/net/ipv4/vs/debug_level  

#查看连接跟踪表  
cat/proc/net/ip_vs_conn  

#检查conntrack表   
conntrack-L|grep<VIP>  

#如果conntrack有问题,尝试禁用   
echo0>/proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal   
modprobe-r nf_conntrack_ipv4 nf_conntrack   

##6.完整的TUN模式诊断脚本

#!/bin/bash  
VIP="your_virtual_ip" CLIENT_IP="client_ip"   

echo"=== LVS TUN Mode Diagnosis ==="   

echo"1.Tunnel Interface:" ip addr show tunl0 ip link show tunl0   

echo-e"\n2.Routing Table:" route-n ip route show table local|grep$VIP   

echo-e"\n3.ARP Settings:" echo"tunl0 arp_ignore: $(cat/proc/sys/net/ipv4/conf/tunl0/arp_ignore)" echo"tunl0 arp_announce: $(cat/proc/sys/net/ipv4/conf/tunl0/arp_announce)"   

echo-e"\n4.Packet Filtering:" iptables-L-n-v|grep$VIP   

echo-e"\n5.Connection Tracking:" cat/proc/net/ip_vs_conn|head-10 conntrack-L|grep$VIP|head-5   

echo-e"\n6.Current Connections:" ipvsadm-Lnc|grep$VIP 

##7.常见问题解决方案

###问题1:回包不走隧道

 #确保VIP在lo接口上并设置正确路由   
 ip addr add$VIP/32 dev lo scope host   
    
 #添加策略路由让回包走隧道   
 ip rule add from$VIP/32 table100   
 ip route add default via<Director_Tunnel_IP>dev tunl0 table100   
    
 #或者简化方案:添加特定路由   
 ip route add<Client_subnet>via<Director_Tunnel_IP>dev tunl0 src$VIP 

###问题2:防火墙拦截

 #添加防火墙规则允许隧道流量   
 iptables-A INPUT-i tunl0-j ACCEPT   
 iptables-A OUTPUT-o tunl0-j ACCEPT   
    
 #允许相关网络流量   
 iptables-A INPUT-s<Director_IP>-j ACCEPT   
 iptables-A OUTPUT-d<Director_IP>-j ACCEPT 

###问题3:内核参数问题

 #调整内核参数   
 echo1>/proc/sys/net/ipv4/conf/tunl0/rp_filter echo1>/proc/sys/net/ipv4/tcp_timestamps echo1>/proc/sys/net/ipv4/tcp_tw_reuse    
     
 #重启keepalived服务 systemctl restart keepalived 

##8.分步测试流程

1.首先在RS上测试本地服务 bash curl http://127.0.01:<port> 2.测试从RS直接访问VIP bash curl http://<VIP>:<port> 3.在Director上监控连接 bash watch'ipvsadm-Ln--stats' 4.使用tcpdump验证数据流路径

按照这个流程逐步排查,通常能定位到TUN模式下回包问题的根本原因。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8491

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?