
つまり、手元にあるクラスタ システムでは、トラフィックをマスター経由でルーティングする必要があります。ノードから外部へのトラフィックのルーティングは機能しますが、部門のサブネットからノードへのトラフィックのルーティングは失敗します。残念ながら、ノードをサブネットに追加することは不可能です。
セットアップ
クラスターは、マスターと多数のノード、およびいくつかの周辺機器で構成されています。ノードは内部ネットワーク上にあり、イントラネットやインターネットからは隠されています。マスターにはすでに NAT が配置されているため、ノードは内部サーバーと外部サーバーにアクセスできます。この部分は機能します。
マスターの外部インターフェースは、制御外のゲートウェイを共有するワークステーション PC と同じサブネット上に存在します。
編集: クラスターは CentOS 7 を実行し、PC は Ubuntu xenial ベースのディストリビューションを実行します。
タスク
一部のソフトウェア パッケージは、ノードに直接アクセスする必要があります。このため、iptables を使用してマスターに 2 番目の NAT を設定し、PC に IP ルートを追加して、マスター経由で 10.10.1.0/24 にトラフィックを送信する必要がありました。
構成
マスター: IP ルート
default via 123.45.67.254 dev eth0 proto static metric 100
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.0.1
123.45.67.0/23 dev eth0 proto kernel scope link src 123.45.67.204 metric 100
マスター: iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 7356 packets, 880K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 4884 packets, 687K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3445 packets, 225K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 3445 packets, 225K bytes)
pkts bytes target prot opt in out source destination
439 33324 MASQUERADE all -- * eth0 10.10.1.0/24 0.0.0.0/0
61828 3710K MASQUERADE all -- * eth1 123.45.67.0/23 10.10.1.0/24
MASQUERADE の代わりに SNAT を使用しても違いはありません。
ノード: IP ルート
default via 10.10.0.1 dev eth1
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.1.1
pc: IPルート
default via 123.45.67.254 dev eth0 proto static metric 100
10.10.0.0/16 via 123.45.67.204 dev eth0
123.45.67.0/23 dev eth0 proto kernel scope link src 123.45.67.191 metric 100
これまでの診断
- node01 からインターネット/イントラネット/PC への NAT は問題なく動作します。
- TCP ハンドシェイク中に pc1 から node01 への NAT が失敗します。
- SYNはマスターを介してnode01に渡され、tcpdumpではSYN_RECVとしてマークされます。
- SYN+ACKはnode01からマスターに送信される
- SYN+ACKがマスターのtcpdumpに表示され、フィルターに渡される
- tcpdumpはSYN+ACKがフィルターを通過していることを示す
- iptablesは、SYN+ACKパッケージがフィルターFORWARDを通過し、FORWARD + POSTROUTINGをmangleしていることを示しています。
- SYN+ACK パッケージは nat POSTROUTING を通過することはありません (通過すべきでしょうか?)
- SYN+ACKパッケージはpc1に到着しない
- もちろん、握手は失敗します
- pc1はSYN_SENTでスタックしています
- node01はSYN_RECVでスタックしています
- 最終的に接続がタイムアウトする
- ゲートウェイでパッケージを監視する方法がありません
私の推測では、途中のステートフル ルータが、マスター上で送信元アドレスが書き換えられるため SYN+ACK パッケージをドロップし、元の SYN パッケージとの関係が失われると考えられます。
どうすればこれを機能させることができるでしょうか?
追加の設定/ログが必要な場合はお知らせください。