頑張っていますip6tables
(バージョン1.6.0)Debian 9 AMIを使用するEC2インスタンスでは、しばらくするとIPv6アドレスのサーバーへの接続が失われましたが、まだIPv4アドレスのサーバーに接続できることがわかりました。もちろん、セキュリティグループを許可するように設定しました。 ICMPを含むすべてのトラフィックIPv4およびIPv6。
チェーンのデフォルトポリシーを特定のポートまたはIPアドレスとすべてのICMPトラフィックを許可するINPUT
ように設定DROP
し、AWS外の別のホスト(LinodeおよびDigitalOcean)がサーバーにpingしようとしましたが、しばらくするとすべてのパケットがEC2インスタンスに到達するのをやめました。私もポートで3つのnginxサービスを実行しています。80、8080そして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
わかるということです。テーブルが増加せず、テーブルに設定されたルールはありません。INPUT
PREROUTING
nat
INPUT
nat
nat
Chain PREROUTING (policy ACCEPT 396 packets, 35498 bytes)
また、まったく使用されていないDockerをインストールし、ip6tables
Dockerコンテナを停止し、Dockerデーモンを無効にし、iptables
Dockerで設定したルールを更新しようとしましたが、運が悪くなり、しばらくすると同じ問題が発生します。
私はこれをping
3つの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アドレスのサーバーへの接続が失われます。