
ローカル ネット用に NAT のような CentOS インスタンスがあります。ローカル ネットにはいくつかのサブネットがあります。その 1 つに PPTP VPN サーバーがあります。このサーバーをインターネットに公開する必要があります。
nat/PREROUTING
つまり、私の問題は、トラフィックがチェーンからチェーンに渡されないことですfilter/FORWARD
。
1.1.1.1
私の外部IP192.168.10.1
私の内部IP10.0.1.1
VPNサーバーのIPeth0
外部インターフェース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 = 1
ping を実行することもできます。10.0.1.1
ポートtcpdump
1723 では、外部インターフェイスでのアクションのみが表示されました。
私には分かりません。
UPD1
ルーティングをチェックしてip route get 10.0.1.1 from <src> iif eth0
、 を取得しましたRTNETLINK answers: Invalid argument
。ところで、私は何らかの回答を得てから、任意のiif
名前 ( eth0
、eth1
、eth2
) を使用しました。有効なルートのみを取得しましたが、引数を使用しませんでした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
ターゲット - ファイアウォール ルールを通過するパケットのパスを調査できます。
追伸まだ問題が解決しない場合は、質問を更新してください。