环境组网如下:
A----->B-----C
IP如下:
A:1.1.1.1
B:1.1.1.2; 2.2.2.1
C:2.2.2.2
需求为,A 需要使用sctp连通C
在B机器上添加iptables规则为:
iptables -t nat -I PREROUTING -d 1.1.1.2 -p sctp --dport 11111 -j DNAT --to-destination 2.2.2.2:11111
就是把A发出的报文的目的地址:端口由1.1.1.2:11111转变为2.2.2.2:11111
同时在C的接口上使用tcpdump抓包,发现并没有接收到sctp报文,为检验网络是否正常(包括路由等配置),仅将上述规则中的sctp改为tcp进行tcp的连通测试
iptables -t nat -I PREROUTING -d 1.1.1.1 -p tcp --dport 11111 -j DNAT --to-destination 2.2.2.2:11111
发现C机器上可以抓到tcp报文,说明网络没有问题,iptables的规则也没有问题。
因为tcpdump抓包解包并不需要系统支持特定的协议,怀疑可能是iptables规则因为某种原因没有生效,借助google发现了解决办法:iptables-nat-not-work-for-sctp
载入nf_conntrack_proto_sctp即可,该模块用来对sctp进行连接跟踪
# modprobe nf_conntrack_proto_sctp
连接跟踪模块可以参见:nf_conntrack连接跟踪模块