ルーターとサーバーの役割の両方を実行するコンピューターがあります。このコンピュータに複数のlxcコンテナがあり、それをLANとWANに公開したいと思います。次のようなhttps://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-configuring_port_forwarding_using_nftablesWANおよびLANコンピュータはサーバーに正常にアクセスできますが、ローカルホスト/ルーターサーバー自体からはアクセスできません!
以下は部分的に有効な構成です。
# Created from lxc-net in debian
table inet lxc {
chain input {
type filter hook input priority filter; policy accept;
iifname "lxcbr0" udp dport { 53, 67 } accept
iifname "lxcbr0" tcp dport { 53, 67 } accept
}
chain forward {
type filter hook forward priority filter; policy accept;
iifname "lxcbr0" accept
oifname "lxcbr0" accept
}
}
# Created from lxc-net in debian
table ip lxc {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.0.3.0/24 ip daddr != 10.0.3.0/24 counter packets 51 bytes 3745 masquerade
}
}
# This is what I added
table ip myportforwarding {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
tcp dport 8088 dnat to 10.0.3.230
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip daddr 10.0.3.230 masquerade
}
}
この答えでいくつかのオプションを試しました。nftablesを使用してRaspberry PiでMinecraftサーバーへのポート転送を設定する方法は?
8088のサービスにローカルにアクセスする方法はないようです。
Wiresharkを見て、次のようにLANからアクセスします。
192.168.1.105 -> 192.168.1.1 SYN
10.0.3.1 -> 10.0.3.230 SYN
...
同じマシンからアクセス:
192.168.1.1 -> 192.168.1.1 SYN
192.168.1.1 <- 192.168.1.1 FIN!
私はnftやiptablesに慣れていないので、何か落ちたと確信しています。
答え1
そのうちのいくつかを見てみましょう一般ネットワークのNetfilterとパケットフロー模式図。それiptablesしかし、ほとんどは次に適用されます。nftables:
記録によると、ナットconntrack状態のパケットに対してのみルックアップテーブル新機能:パケット開始新しい流れ。
ルーティング/配信されるトラフィックNAT/事前ルーティングフック:新しいストリームがNATを実行する機会がある場所。 OPがイベントを処理しました。
ローカルで開始されたパケット(次に生成)ローカルプロセス中央にバブル)最初に通過自然/出力接続すると、回答は通常どおり配信されます。NAT/事前ルーティングフック。クエリの宛先がまだ変更されていないことを除いて、回答は以前に生成されたストリームと一致するため、NEW状態のパケットではなくなりました。NAT/事前ルーティング遅すぎるため、そのようなトラフィックについてはフックを参照しません。 NATを実行できる唯一の場所は次のとおりです。自然/出力。
したがって、この場合、ルーティングされたパケットとローカルで開始されたパケットの両方に同じ変更を加える必要があります。ルールは次のとおりです。NAT/事前ルーティング次にコピーする必要があります。自然/出力そしてしばしばさまざまな状況に合わせて少し調整されています。
ここでの適応はホストが自分に到達することに関するものなので、インターフェイスの場合はループバック(lo
)インターフェイスのルーティングケースなので、oif lo
これに追加されます。このフィルタがない場合、ポート8088を使用してホストからどこにでも送信されるすべてのクエリはコンテナにリダイレクトされ、ホストのみがそのケースで使用されます。
すでに存在するチェーンにこのチェーンを追加します。IP 内ポート転送テーブルでこれを処理します。
chain output {
type nat hook output priority dstnat; policy accept;
tcp dport 8088 oif "lo" dnat to 10.0.3.230
}
小さい詳細: from自然/出力トリガールートリダイレクトの確認ルーティングスタックが前のルーティング決定を再検討するように指示するセクション(出力インターフェイスlo
)の後ろにルートリダイレクトの確認出力インターフェイスはlxcbr0
。