iptables nat不适用于sctp

我有一个服务器在内部networking,我想从外部访问它。

networking是这样的:服务器A(132.196.28.229)在外部networking服务器B(10.35.202.24)可以访问networking服务器C(192.168.10.99)在内部networking

所以,我在服务器B上configurationiptables将所有通信从服务器A转发到服务器C

iptables -t nat -A PREROUTING -d 10.35.202.24 -j DNAT --to-destination 192.168.10.99 

然后我用ping来testing它,它工作。 服务器B上的Tcpdump ,你可以看到来自服务器A的ping,目标是10.35.202.24

 15:34:36.366034 IP 132.196.28.229 > 10.35.202.24: ICMP echo request, id 24510, seq 1, length 64 15:34:37.366321 IP 132.196.28.229 > 10.35.202.24: ICMP echo request, id 24510, seq 2, length 64 15:34:38.374983 IP 132.196.28.229 > 10.35.202.24: ICMP echo request, id 24510, seq 3, length 64 15:34:39.374849 IP 132.196.28.229 > 10.35.202.24: ICMP echo request, id 24510, seq 4, length 

和服务器C上的Tcpdump。现在目标地址更改为192.168.10.99

 15:34:35.741802 IP 132.196.28.229 > 192.168.10.99: ICMP echo request, id 24510, seq 1, length 64 15:34:36.742018 IP 132.196.28.229 > 192.168.10.99: ICMP echo request, id 24510, seq 2, length 64 15:34:37.750633 IP 132.196.28.229 > 192.168.10.99: ICMP echo request, id 24510, seq 3, length 64 15:34:38.750499 IP 132.196.28.229 > 192.168.10.99: ICMP echo request, id 24510, seq 4, length 64 

但是,相同的转发不适用于SCTP消息。 这是从服务器A触发的INIT消息:

 15:39:18.787145 IP 132.196.28.229.32763 > 10.35.202.24.36412: sctp (1) [INIT] [init tag: 495530240] [rwnd: 62464] [OS: 64] [MIS: 64] [init TSN: 322647100] 15:39:18.787189 IP 10.35.202.24 > 132.196.28.229: ICMP 10.35.202.24 protocol 132 unreachable, length 76 15:39:21.786640 IP 132.196.28.229.32763 > 10.35.202.24.36412: sctp (1) [INIT] [init tag: 495530240] [rwnd: 62464] [OS: 64] [MIS: 64] [init TSN: 322647100] 15:39:21.786687 IP 10.35.202.24 > 132.196.28.229: ICMP 10.35.202.24 protocol 132 unreachable, length 76 

而且我无法捕获服务器C上的任何东西。 看起来像sctp的NAT不工作,并且由于服务器B没有任何sctp服务。 所以服务器B回复为无法访问。

我也testing过ssh。 转发工作正常。 所以它只看起来不适合SCTP !!

任何build议为什么发生这种情况? 是我错过的sctp的特殊configuration?

我想你已经安装了SCTP,如果是的话,你可能会错过nf_conntrack_proto_sctp模块。 iptables需要使用该模块才能使用SCTP。 尝试这个:

 # modprobe nf_conntrack_proto_sctp