web-dev-qa-db-ja.com

iptablesnatはsctpでは機能しません

内部ネットワークにサーバーがあり、外部からアクセスしたい。

ネットワークは次のようになります。サーバーA(132.196.28.229)は外部ネットワークにありますサーバーB(10.35.202.24)は両方のネットワークにアクセスできますサーバーC(192.168.10.99)は内部ネットワークにあります

したがって、サーバーAからサーバーCにすべてのトラフィックを転送するようにサーバーBでiptablesを構成します

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

そして、sctp用にサーバーCで何もキャプチャできません。 NAT for sctpが機能せず、サーバーBがsctpサービスをオンにしていないため、サーバーBは到達不能として応答するようです。

Sshもテストしました。転送はうまく機能します。したがって、SCTPでは機能しないように見えます!! ??

なぜこれが起こるのか提案はありますか?見逃したsctpの特別な設定はありますか?

1
mingdao

すでにSCTPをインストールしていると思いますが、インストールしている場合は、おそらくnf_conntrack_proto_sctpモジュールがありません。このモジュールは、iptablesがSCTPと連携するために必要です。これを試して:

# modprobe nf_conntrack_proto_sctp
2
vicentfg

SCTPポートを許可することで確認できます。ここで最初のメッセージINIT adINIT-ACKが機能する可能性があります。他のノードがSCTPINIT-ACKペイロードでIPを送信することに注意してください。詳細を確認してください

https://www.cspsprotocol.com/sctp-protocol-basic-and-advance-sctp-concepts/

0
Ramesh