LXCゲストへの接続を含む、私のホストへのすべての接続をどのようにリストしますか?

LXCゲストへの接続を含む、私のホストへのすべての接続をどのようにリストしますか?

netstat試してみましたが、lsofLXCゲストへの接続を見ることができないようです。

これを達成する方法はありますか?みんなすぐにゲストが来ますか?


本質的に私を混乱させることは、私がスーパーユーザーとして実行している間にゲストのプロセスを見ることができるということです。また、veth各訪問者に対してインターフェイスが動的に作成されていることがわかります。他の方法では、表示されるプロセスで接続が表示されないのはなぜですか?

ベストアンサー1

カーネルはetcに接続状態を表示します/proc/net/tcpが、/proc/net/udp名前空間はネットワークスタックを分離するため、アプリケーションがコンテナ(別のユーザースペース)内で実行され、ネットワークに接続されている場合、ホストは/proc/net/tcp接続を表示しません。

conntrackマシン全体の接続を表示するために使用できます。しかし、Wireguardなどの一部のインターフェイスでは機能しません。

ip -all netns exec command任意のユーザー空間内でコマンドを実行するために使用できます。しかし、これはip、コマンドを使用して作成されたユーザースペースに制限されます。

コンテナで実行されているアプリケーションの観点からは、ネットワークスタックの状態はその場所のホストシステムに表示され続けるため、/proc/$pid/net/tcp適切なツールがcで書かれるのを待つ回避策にループする小さなbashスクリプトを作成しました/proc/$pid/net/tcp[udp]。システム全体の接続を一覧表示できるように、すべての状態を接続します。

スクリプトは最初にすべてを連結または/proc/$pid/net/tcpソート/proc/$pid/net/udpし、重複を削除し、値を読み取り可能なテキストに変換して印刷します(スクリプトにはfind、、、、、grepおよびがxargs必要です)。awkstrtonumsortuniq

TCPの場合

find /proc/ 2>/dev/null | grep tcp | grep -v task | grep -v sys/net | xargs grep -v rem_address 2>/dev/null | awk '{x=strtonum("0x"substr($3,index($3,":")-2,2)); y=strtonum("0x"substr($4,index($4,":")-2,2)); for (i=5; i>0; i-=2) x = x"."strtonum("0x"substr($3,i,2)); for (i=5; i>0; i-=2) y = y"."strtonum("0x"substr($4,i,2))}{printf ("%s\t:%s\t ----> \t %s\t:%s\t%s\n",x,strtonum("0x"substr($3,index($3,":")+1,4)),y,strtonum("0x"substr($4,index($4,":")+1,4)),$1)}' | sort | uniq --check-chars=25

UDPの場合

find /proc/ 2>/dev/null | grep udp | grep -v task | grep -v sys/net | xargs grep -v rem_address 2>/dev/null | awk '{x=strtonum("0x"substr($3,index($3,":")-2,2)); y=strtonum("0x"substr($4,index($4,":")-2,2)); for (i=5; i>0; i-=2) x = x"."strtonum("0x"substr($3,i,2)); for (i=5; i>0; i-=2) y = y"."strtonum("0x"substr($4,i,2))}{printf ("%s\t:%s\t ----> \t %s\t:%s\t%s\n",x,strtonum("0x"substr($3,index($3,":")+1,4)),y,strtonum("0x"substr($4,index($4,":")+1,4)),$1)}' | sort | uniq --check-chars=25

出力は次のとおりです。 (pidは正確ではなく、コンテナを識別するためにのみ使用されます。)

127.0.0.1      :80       ---->   0.0.0.0        :0      /proc/10176/net/tcp:
192.168.0.2    :33882    ---->   192.30.253.125 :443    /proc/10176/net/tcp
192.168.0.2    :34020    ---->   192.30.253.125 :443    /proc/10176/net/tcp:
192.168.0.2    :34162    ---->   192.30.253.125 :443    /proc/10176/net/tcp:
192.168.0.2    :36242    ---->   192.30.253.124 :443    /proc/10176/net/tcp:
192.168.0.2    :37324    ---->   192.30.253.124 :443    /proc/10176/net/tcp:
192.168.0.2    :40122    ---->   216.239.38.21  :80     /proc/10176/net/tcp:
192.168.0.2    :40124    ---->   216.239.38.21  :80     /proc/10176/net/tcp:

また、非常に便利なコマンドを使用して名前空間を管理する優れたツールも見つかりました。nsutils

おすすめ記事