ip6tablesを使用すると、しばらくするとIPv6ホストへの接続が失われるのはなぜですか?

ip6tablesを使用すると、しばらくするとIPv6ホストへの接続が失われるのはなぜですか?

頑張っていますip6tables(バージョン1.6.0)Debian 9 AMIを使用するEC2インスタンスでは、しばらくするとIPv6アドレスのサーバーへの接続が失われましたが、まだIPv4アドレスのサーバーに接続できることがわかりました。もちろん、セキュリティグループを許可するように設定しました。 ICMPを含むすべてのトラフィックIPv4およびIPv6。

チェーンのデフォルトポリシーを特定のポートまたはIPアドレスとすべてのICMPトラフィックを許可するINPUTように設定DROPし、AWS外の別のホスト(LinodeおよびDigitalOcean)がサーバーにpingしようとしましたが、しばらくするとすべてのパケットがEC2インスタンスに到達するのをやめました。私もポートで3つのnginxサービスを実行しています。808080そして5555、ポート8080そして5555nginx Dockerコンテナの公開ポートですが、同じ問題を抱えているすべてのポートに対してGET要求をしようとするため、これは問題ではありません。

奇妙なことは、パケット数を見ていますが、接続が失われたときに破棄されたパケット数が増えないことですip6tables -L -xvn

Chain INPUT (policy DROP 21 packets, 2748 bytes)

ACCEPTところで基本ポリシーを( )に変更すると再び動作になりip6tables -P INPUT ACCEPTました。偶然かどうかはわかりません。

また、natパケット数の監視テーブルを使用しており、watch -n 1 ip6tables -t nat -L -xvnすべてがうまくいくとチェーン内のパケット数が増えます。 1つの注目すべき点は、この問題が発生するとチェーン内のパケット数が増加することがPREROUTINGわかるということです。テーブルが増加せず、テーブルに設定されたルールはありません。INPUTPREROUTINGnatINPUTnatnat

Chain PREROUTING (policy ACCEPT 396 packets, 35498 bytes)

また、まったく使用されていないDockerをインストールし、ip6tablesDockerコンテナを停止し、Dockerデーモンを無効にし、iptablesDockerで設定したルールを更新しようとしましたが、運が悪くなり、しばらくすると同じ問題が発生します。

私はこれをping3つのcurl異なるサーバーで試しています:

ping6 HOST_IP

そして:

while true; do curl http://HOST_IP:5555 --connect-timeout 10; sleep 1; done

ip6tables私が使用するルールは次のとおりです。

-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -s IPv6_OF_ONE_OF_MY_OTHER_HOSTS -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5555 -j ACCEPT
-P INPUT DROP

ホワイトリストのホストがすべてのポートにアクセスでき、他の2つのホストがポートにのみアクセスできるかどうかをテストしようとしています。5555

私は何が間違っていましたか?この問題をどのように解決できますか?

答え1

546いくつかのテストが完了したら、次のようにDHCPv6クライアントポートを有効にしたときに問題が見つかりました。

-A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

すべてがうまく機能し始めました。また、これが実際の問題であることを確認するためにこのルールを削除しようとしました。はい、実際にこのルールを削除すると、これらのパケットが破棄され、IPv6アドレスのサーバーへの接続が失われます。

関連情報