CentOS7下FreePBX与GOIP设备SIP注册失败及源IP被替换问题排查求助
CentOS7下FreePBX与GOIP设备SIP注册失败及源IP被替换问题排查求助
大家好,我现在碰到一个棘手的问题,折腾好几天都没搞定,想请教下社区的各位大佬:
我的服务器环境
我用CentOS7搭建了一台FreePBX服务器(也就是下面说的PC1),网卡配置如下:
- eth0:固定IP
192.168.188.55 - eth1:加入了br0网桥,网桥内IP是
10.147.20.69 - tap1:同样属于br0网桥,IP
10.147.20.2,用来连接PC2 - eth1端口上平时接的是GOIP SIP中继设备,偶尔会换成PC3测试
测试的现象对比
正常情况(接PC3时)
- PC2 ping服务器、ping eth1的IP都能通
- PC3 ping服务器正常,用SIP客户端注册到FreePBX也完全没问题
异常情况(接GOIP时)
- 不管是把GOIP当成SIP客户端注册,还是作为中继对接,都注册失败
- 我用
tcpdump -i eth0 src 10.147.20.2抓包分析,发现FreePBX发的SIP Option包有问题:From字段的源IP被莫名替换了——原本应该是2002@10.147.20.2,结果变成了2002@192.168.188.51(这个是eth0的网关地址)
当前的iptables规则
我现在配置的iptables规则如下:
-t nat -A POSTROUTING -o eth1 -j MASQUERADE -A FORWARD -o eth1 -j ACCEPT -t nat -A PREROUTING -i ztyqbvbk6k -p tcp --dport 8060 -j DNAT --to 10.147.20.17:80 -A FORWARD -i ztyqbvbk6k -p tcp --dport 80 -d 10.147.20.17 -j ACCEPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE -A FORWARD -i eth0 -o zt+ -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i zt+ -o eth0 -j ACCEPT
补充测试信息
- 我试过把GOIP直接连到路由器,获取
192.168.188.88的IP,这时候FreePBX就能正常注册到GOIP上,说明GOIP本身没问题 - 服务器的路由表(执行
route -n输出):
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.188.1 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth1 10.147.20.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 10.147.20.0 0.0.0.0 255.255.254.0 U 0 0 0 tap1 192.168.188.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
更新的排查信息
刚才执行了ip route get 10.147.20.2 from 10.147.20.69,结果返回network is unreachable,但之前PC3连eth1的时候,ping 10.147.20.2是完全正常的,这点我有点搞不懂。
想请教的问题
- 这种场景下需要用到conntrack吗?如果需要的话,怎么检查它的状态或者启用它?
- 我当前的iptables规则有没有哪里配置错了?会不会是NAT规则导致的源IP替换?
- 各位大佬还有什么排查方向或者解决建议吗?
备注:内容来源于stack exchange,提问作者SHERIF OMRAN




