DNATを1つのパブリックIPに制限する方法は?

DNATを1つのパブリックIPに制限する方法は?

ハイパーバイザーで複数の公開IPシングルネットワークインターフェース、2セットの仮想マシンがあります。

  • グループAメンバーのパブリックIPは、ホストインターフェイスを介して(ルーティングが確立されたブリッジを介して)そのメンバーに直接ルーティングされます。 [1]
  • グループ B のメンバーは NAT が設定されたブリッジにあるため、プライベート IP を取得し、その接続は特定のパブリック IP を介して NAT されます。私たちはこれを共有アドレスと呼びますIPb。 [2]

特定のポートからの着信接続は、IPb特定のグループBメンバーに転送されます。私が経験している問題は、DNAT(Port Forward)ルールが経由の着信パケットだけでなく、IPb他のパブリックIPからの着信パケットにも適用されることです。

DNATルールをに転送されるパケットに制限するにはどうすればよいですかIPb

頑張った-dst IPbただし、これにより、PREROUTING実際にはルールはまったくトリガーされません(ポート転送は停止します)。 [サム]

ありがとう

[1]
auto eth0
iface eth0 inet static
        address <eth0-main-ip>/32
        gateway <gateway-ip>
        pointopoint <gateway-ip>

#GroupA Bridge:
auto vmbr12
iface vmbr12 inet static
        address <eth0-main-ip>/32
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up   ip route add <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
        down ip route del <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
        .
        .
        .
[2]
#GroupB Bridge:
auto vmbr4
iface vmbr4 inet static
        address 10.0.0.1/16
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward

        post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-up iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
        post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT

        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-down iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
        post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT

        .
        .
        .
[3]
#Using IPb in PREROUTING rule
<snip>
        post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-up iptables -A PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
        post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-down iptables -D PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
        post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
</snip>

ベストアンサー1

PREROUTINGルールで-dst IPbを試みましたが、実際にはルールがまったくトリガーされませんでした(ポート転送が停止しました)。 [サム]

しかし、これが正しいアプローチであることがわかりました。IPb 〜しなければならないサブネットの長さを含みます。この場合、私はちょうど使用しましたが、期待どおりに機能しIPb/32ました。

おすすめ記事