祝各位道友念头通达
GitHub Gitee 语雀 打赏

组播,广播,多网口问题

问题

机器有多个网口,其中有一网口用来接收组播的数据, 使用 tcpdump -i [网口] udp port 2000 -nn 抓包,显示该网口有过来的udp包,但是应用程序一直接受不到

分析

数据包从网络中过来的时候,网口是接收到了数据包,但是应用程序没有接收到,就是数据包在走协议栈的过程中因为一些设置别丢。查看UDP组播发来的数据包源IP地址为:组播的IP
比如组播服务器地址: 192.9.200.102
网口 ip为: 192.9.200.10, 监听的组播ip为:224.9.200.5
接收到的数据包 地址为 192.9.200.102->224.9.200.5

查看路由表:image
当前路由显示:除了192.9.200.0网段的包走网口 enp1s0f0,其余的都走网口 enp1s0f2

解决方法

1.配置路由

## 让网段 224.9.200.3的IP走enp1s0f0网口
route add -net 224.9.200.3 netmask 255.255.255.255 dev enp1s0f0  

2.取消内核对原地址的校验

1) 修改配置文件 /etc/sysctl.conf

## 添加或修改
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

2) 命令行临时修改

 ## 显示一个内核变量
 sysctl net.ipv4.conf.all.rp_filter 
 ## 设置一个内核变量 
 sysctl -w net.ipv4.conf.all.rp_filter=0

3) 修改文件系统 /proc

## 查看 
cat /proc/sys/net/ipv4/conf/all/rp_filter
## 设置
echo "0" >/proc/sys/net/ipv4/conf/all/rp_filter
posted @ 2021-12-16 16:38  韩若明瞳  阅读(455)  评论(0编辑  收藏  举报