問題描述
服務器運行正常,維保需要,重啟服務器后應用程序無法收到組播的媒體數據。百思不得其解。
原因分析
最終的定位原因是 linux系統的自我保護機制導致的。
rp_filter
(反向路徑過濾)是Linux內核的一個安全特性,用于防止IP欺騙。如果rp_filter
設置為1,系統會丟棄那些源地址和到達接口不匹配的數據包。這可能導致你的程序無法接收到組播數據包。
解決方法:
修改文件/etc/sysctl.conf
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.eth2.rp_filter=0
執行 sysctl -p 生效
這樣執行以后就可以正常收到組播的媒體數據了。在此記錄一下
本項目使用的網卡是eth2,此處需要根據實際情況修改為實際使用的網卡名