2つの仮想マシン(ルーターとクライアント)Ubuntu Server 18 04があります。ルーターはクライアントのゲートウェイです。 Nftablesはルータにインストールされ、2つのチェーンを使用してルーティングの前後にNATテーブルを作成し、クライアントのルールを設定します。
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oif "enp0s3" ip saddr 192.168.2.100 snat to 192.168.1.10 comment "STATIC" # handle 4
}
}
クライアントからインターネットへのpingをオンにしました。すべてがうまくいきます。
root@router:/home/router# conntrack -L -n
icmp 1 29 src=192.168.2.100 dst=8.8.8.8 type=8 code=0 id=13006 src=8.8.8.8 dst=192.168.1.10 type=0 code=0 id=13006 mark=0 use=1
ただし、ルールを削除すると、セッションが中断されることなくpingが続行されます。
root@router:/home/router# nft delete rule nat postrouting handle 4
root@router:/home/router# nft list ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
}
}
root@router:/home/router# conntrack -L -n
icmp 1 29 src=192.168.2.100 dst=8.8.8.8 type=8 code=0 id=13006 src=8.8.8.8 dst=192.168.1.10 type=0 code=0 id=13006 mark=0 use=1
conntrack v1.4.4 (conntrack-tools): 1 flow entries have been shown.
ルールが変更または削除されると、クライアントの現在のセッションが終了することを望みます。
どうやって入手できますか?
答え1
Linuxネットワークスタックに加えて動作を変更しますが、可能な限りネットワークスタックから分離するように設計された追加の「スタック」があります。それはNetfilterです。このツールを使用すると、クライアント(まだカーネルにあります)は、ネットワークスタックのライフサイクル中にさまざまな戦略的ポイント(ファイアウォールとNATを実行)でパケットを傍受するためにこのツールに接続できます。これらの顧客の中では、iptablesそしてnftables。これは次のとおりです。一般ネットワークのNetfilterとパケットフロー模式図:
渡すジェーンエンジェルハート- 自分の作品、由来静的変数ジェネレータ パプアニューギニア、CC-SA 3.0、協会
この回路図は次のように生成されたが、iptables覚えておいてください。nftables。この回答ではnftables同じ効果があるiptables。ここで最も話されているのはnftables適用対象iptables(レガシーまたはnftバージョン)またはその逆の場合も同様です。
ご覧のとおり、クライアント(実際にNetfilterの一部と見なされる)のもう1つの重要な点は、クライアントがconntrack
見るすべてのフローを追跡し、同じフロー履歴を使用して多くのNAT処理を実行することです。 NATは実際に作られていません。nftables:回路図の中央に示すように、単一のパケットではなくフロー全体の運命を決定する変更ルールを提供できるように、各フローの最初のパケットのみを受信します。情報が保存されると、ルックアップアイテムは独立して処理され、フックタイプチェーンはそのフローのconntrack
後続のパケットを見ることができません。conntrack
nat
したがって、問題ではありません。ストリームが処理されると、ルールがなくなってもそのルールは使用されなくなるため、ルール変更conntrack
の影響を受けません。nat
このプロセスに影響を与えるために取ることができるアクションの1つは、施設に直接問い合わせることですconntrack
。これに関連するツールと呼ばれます。conntrack
(からhttps://conntrack-tools.netfilter.org/)。
OPが書いたように、アイテムに関する情報を読み取るためconntrack
に使用できますが、アイテムを更新、作成、削除、または更新(すべて削除)するためにも使用できます。
粒度を選択できます。
すべてのアイテムを削除:
conntrack -F
誘拐されたすべてのエントリを削除します(技術的には、応答先アドレスがルックアップテーブルの元のソースアドレスと異なることを意味します)。
conntrack -D --src-nat
すべての要素、さらに正確なICMP IDを指定するOPエントリの外科的削除まで可能です。したがって、ID は間違いなく異なるため、NAT ルールを削除する前に開始された同じ ping コマンドは中断されません。
# conntrack -D -p icmp --orig-src 192.168.2.100 --orig-dst 8.8.8.8 --reply-src 8.8.8.8 --reply-dst 192.168.1.10 --icmp-type 8 --icmp-code 0 --icmp-id 13006 icmp 1 28 src=192.168.2.100 dst=8.8.8.8 type=8 code=0 id=13006 src=8.8.8.8 dst=192.168.1.10 type=0 code=0 id=13006 mark=0 use=1 conntrack v1.4.6 (conntrack-tools): 1 flow entries have been deleted.
conntrack
(Ubuntu 18.04LTSの1.4.4がここで異なる動作をする理由はありません)
このエントリが削除されると、以前このフローに属していた次のパケットは新しいパケットと見なされます。状態新しいnat
、チェーンを変更して巡回する別の機会が得られます。これ以上変更がないため、送信の場合は、NATが指定されていない次のルーターを通過し、そのルーターはそれを削除するか、または削除するルーターに転送します(厳密なリバースパス転送のため)。または特定のルーティングルールを対象とする)RFC1918アドレス)、8.8.8.8の遅延受信応答の場合は、ローカルにルーティングされ、ネットワークスタックによって無視されます。 ping コマンドが中断され、現在タイムアウトします。