iptables nat 不适用于 sctp

iptables nat 不适用于 sctp

我在内部网络中有一台服务器,我想从外部访问它。

网络是这样的: 服务器 A (132.196.28.229) 位于外部网络 服务器 B (10.35.202.24) 可以访问这两个网络 服务器 C (192.168.10.99) 位于内部网络

因此,我在服务器 B 上配置 iptables 将所有流量从服务器 A 转发到服务器 C

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

然后我用 ping 测试它,它有效。服务器 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 的任何内容。看起来 sctp 的 NAT 不起作用,并且由于服务器 B 没有打开任何 sctp 服务。所以服务器B回复不可达。

我也测试过ssh。转发效果很好。所以它看起来只是不适用于 SCTP!!!!!

有什么建议为什么会发生这种情况吗?我错过了 sctp 的任何特殊配置吗?

答案1

您可能缺少 Linux 内核中的某些模块。尝试这个:

modprobe nf_conntrack_proto_sctp
modprobe nf_nat_proto_sctp 

相关内容