10.0.1.1
10.0.1.2
リモートサーバー()とローカルコンピューター()の間にVPNを作成して、サーバーがローカルコンピューターに接続するか、その逆も可能にするワイヤーガード構成があります。
サーバーがポートから着信したすべてのTCP接続を8000
自分のローカルコンピュータにルーティングしたいと思います。
私が試したこと:
この回答:
iptables -t nat -I PREROUTING -p tcp --dport 8000 -j DNAT --to-destination 10.0.1.2:8000
iptables -t nat -I POSTROUTING -p tcp --dport 8000 -d 10.0.1.2 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to-destination 10.0.1.2:8000
iptables -t nat -D POSTROUTING -j MASQUERADE
またこれを試しました:
iptables -t nat -A POSTROUTING -p tcp -d 10.0.1.2 --dport 8000 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to-destination 10.0.1.2:8000
どちらも機能しません(インターネット経由でアクセスできません)。
もちろん、nginx
これを行うためにサーバーを設定することはできますが、Webソケット接続のように、私が望むほど信頼性が高く強力ではありません。
VPN接続とファイアウォールはうまく機能します。curl
リモートサーバーのシェルからローカルコンピュータのサーバーにアクセスでき、リモートサーバー8000
のポートから起動されたHTTPサーバーにアクセスできます。道sysctl net.ipv4.ip_forward
。1
答え1
たとえば、テーブルを制御できる他のツールを実行しているかどうかは説明していませんfirewalld
。これにより、ルールが適用されない場合があります。
FORWARD
また、メインテーブルのルールについて話しているのを見ることはできません。
iptablesの完全なリストを見ることができませんでした。 NATルールの前に適用されるチェーンの前部からDROPまたはREJECTに移動する他のルールがある可能性があります。
(RHEL 7で独自のファイアウォールを構築する方法について詳しく説明します。https://www.sweharris.org/post/2017-05-07-home-grown-router/ - 簡単な要約は次のとおりです。)
通常、最初から始める場合は、NATを開始する前にマスターテーブルを設定する必要があります。 INPUTチェーンはコンピュータに向かうパケット用で、OUTPUTチェーンはコンピュータで発生するパケット用で、FORWARDチェーンはパケット用です。時間旅行あなたのマシン。
私の場合は、3つすべてを同じに設定しました。
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
開始トラフィックを許可する必要があります。
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i internal_interface -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -i internal_interface -j ACCEPT
iptables -A FORWARD -i external_interface -m conntrack --ctstate DNAT -j ACCEPT
eth0
私は「external_interface」を使用します。これは、VPN、トンネル、tun0
またはブリッジ(私が使用するもの)などのインターフェイスです。
これにより、「内部」のトラフィックが外部に到達し、外部から応答することができます。
NATを起動して、「内部」マシンが「外部」マシンにアクセスできるようになりました。
iptables -t nat -A POSTROUTING -o external_interface -j MASQUERADE
これにより、ローカルネットワークを離れて外部の世界に向かうすべてのトラフィックが外部インターフェイスのアドレスにNATされます。
これで、すでに試したのと同様のルールを使用して、外部トラフィックがファイアウォールの背後にある内部コンピュータに到達することを許可できます。
例えば
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.0.2:443
これらの規則の一部は必ずしも必要ではありませんが、間違った形式のパケット、内部が外部(および外部からの応答)に到達する機能、ポート転送を介して内部の特定のサービスに到達する外部の機能をフィルタリングすることがあります。 。