CentOS 7 NAT ルーティングと IPTABLES

CentOS 7 NAT ルーティングと IPTABLES

ローカル ネット用に NAT のような CentOS インスタンスがあります。ローカル ネットにはいくつかのサブネットがあります。その 1 つに PPTP VPN サーバーがあります。このサーバーをインターネットに公開する必要があります。

nat/PREROUTINGつまり、私の問題は、トラフィックがチェーンからチェーンに渡されないことですfilter/FORWARD

  • 1.1.1.1私の外部IP
  • 192.168.10.1私の内部IP
  • 10.0.1.1VPNサーバーのIP
  • eth0外部インターフェース
  • eth1内部インターフェース

NATルール(動作します。PKTS変更BYTESされます)

-A PREROUTING -d 1.1.1.1/32 -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.1.1
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p gre -j DNAT --to-destination 10.0.1.1

フィルタールール(動作しません。PKTS変更BYTESされません)

-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p tcp -m tcp --sport 1723 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p gre -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

もちろん、NAT サーバーからnet.ipv4.ip_forward = 1ping を実行することもできます。10.0.1.1

ポートtcpdump1723 では、外部インターフェイスでのアクションのみが表示されました。

私には分かりません。

UPD1ルーティングをチェックしてip route get 10.0.1.1 from <src> iif eth0、 を取得しましたRTNETLINK answers: Invalid argument。ところで、私は何らかの回答を得てから、任意のiif名前 ( eth0eth1eth2) を使用しました。有効なルートのみを取得しましたが、引数を使用しませんでしたiif

UPD2-A FORWARD -d 10.0.1.1/32 -j ACCEPT最初と同じようにチェーンにルールを追加しましたfilter/FORWARD。しかし何も起こりませんでした。パケットとバイトはゼロでした。

答え1

  • その他のルールは非常に重要です。ルールの順序も重要です。したがって、iptables-save -cコマンドの出力を確認してください。作成したルールの上位にあるルールを調べてください。

  • nat/PREROUTINGとチェーンの間でfilter/FORWARDルーティングの決定が行われます。 でルーティングを確認してくださいip route get 10.0.1.1 from <src> iif eth0。有効なルートが返されるはずです。それ以外の場合は、質問に貼り付けてください。

  • コマンドの出力も調査しますnstat -az

  • PPTP を NAT 経由で渡すには、conntrack のモジュールをロードする必要があります。

    • nf_conntrack_proto_gre
    • nf_nat_proto_gre
    • nf_conntrack_pptp
    • nf_nat_pptp
  • 最近のカーネルでは、特に pptp の場合、conntrack ヘルパーを明示的に有効にする必要があります。そのため、追加のルールを追加する必要があります。

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
  • ヘルパーを有効にする他の方法は、sysctl コマンドです。
sysctl -w net.netfilter.nf_conntrack_helper=1
  • 問題のトラブルシューティングに役立つその他のツール:
    • conntrack -E- conntrack イベント監視
    • tcpdump
    • -j NFLOGそしてtcpdump -ni nflog- iptables ルールからパケットをキャプチャできるようにします。
    • -j TRACEターゲット - ファイアウォール ルールを通過するパケットのパスを調査できます。

追伸まだ問題が解決しない場合は、質問を更新してください。

関連情報