私の設定

私の設定

KVM仮想マシンから特定のHTTPSウェブサイトをロードできず、IPv6を介してのみロードできるため、これは私を狂わせます。 IPv4はうまく動作します。 IPv6接続は、ハイパーバイザーの同じWebサイトに対して機能します。

私の設定

  • KVM ハイパーバイザーは以下で実行されます。Ubuntu 14.04.5 LTS
  • イーサネット0に追加されるbr0ブリッジインターフェイス、このブリッジを使用して仮想マシンを外部世界に接続します。
  • 2 台の仮想マシンがハイパーバイザーで実行されます。最初は実行中です。Ubuntu12.04(EOLに達したことを知っていますが、それは問題ではありません。)2番目はUbuntu16.042つの仮想マシン問題が発生します。
  • VM は Virtio インターフェイスを使用してネットワークに接続します。
  • IPv6アドレスは、ハイパーバイザーと仮想マシンによって取得されます。
  • 私のDNSサーバーは、ドメインがサポートしている場合はIPv6アドレスを返し、それ以外の場合はIPv4で動作します。
  • ハイパーバイザーとVMの両方にIPv6用のファイアウォール(ip6tables)がありません。

    # ip6tables -v -L -n 
    Chain INPUT (policy ACCEPT 196K packets, 32M bytes)
    pkts bytes target     prot opt in     out     source               destination         
    
    Chain FORWARD (policy ACCEPT 5007K packets, 3858M bytes)
    pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 185K packets, 30M bytes)
    pkts bytes target     prot opt in     out     source               destination         
    
    
    # ip6tables -v -L -n -t nat
    Chain PREROUTING (policy ACCEPT 1749 packets, 181K bytes)
    pkts bytes target     prot opt in     out     source               destination         
    
    Chain INPUT (policy ACCEPT 135 packets, 24165 bytes)
    pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 187 packets, 27578 bytes)
    pkts bytes target     prot opt in     out     source               destination         
    
    Chain POSTROUTING (policy ACCEPT 1801 packets, 185K bytes)
    pkts bytes target     prot opt in     out     source               destination
    

質問

  • IPv6(およびIPv4)接続は、ハイパーバイザーのすべてのWebサイトで機能します(良好で予想されます)。

    # wget https://lwn.net -O - > /dev/null; echo Exit code: $?
    --2017-08-02 18:55:47--  https://lwn.net/
    Resolving lwn.net (lwn.net)... 2600:3c03::f03c:91ff:fe61:5c5b, 45.33.94.129
    Connecting to lwn.net (lwn.net)|2600:3c03::f03c:91ff:fe61:5c5b|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 25202 (25K) [text/html]
    Saving to: ‘STDOUT’
    
    100%[=====================================>] 25,202       149KB/s   in 0.2s   
    
    2017-08-02 18:55:48 (149 KB/s) - written to stdout [25202/25202]
    
    Exit code: 0
    
  • IPv6接続は、VM内で試したほとんどのWebサイトで動作しますが、すべてではありません。例えば、https://lwn.netそしてhttps://hioa.no2つのhttpsウェブサイトの使用に問題があります。以下のwgetコマンドで示すように、接続が到着しました。接続済み状態ですが、そこに付いています。

    # wget https://lwn.net -O - > /dev/null; echo Exit code: $?
    --2017-08-02 18:53:40--  https://lwn.net/
    Resolving lwn.net (lwn.net)... 2600:3c03::f03c:91ff:fe61:5c5b, 45.33.94.129
    Connecting to lwn.net (lwn.net)|2600:3c03::f03c:91ff:fe61:5c5b|:443... connected.
    

これまで私は問題を解決しようとしました。

  1. ping6で始めましょう。興味深いことに、IPv6を使用すると、仮想マシンのpingはすべてのドメインで動作します! httpsを含めると機能しません。

    # ping6 -c 1 -n hioa.no 
    PING hioa.no(2001:700:700:2::65) 56 data bytes
    64 bytes from 2001:700:700:2::65: icmp_seq=1 ttl=53 time=88.7 ms
    
    # ping6 -c 1 -n lwn.net
    PING lwn.net(2600:3c03::f03c:91ff:fe61:5c5b) 56 data bytes
    64 bytes from 2600:3c03::f03c:91ff:fe61:5c5b: icmp_seq=1 ttl=54 time=145 ms
    
  2. 仮想ネットワークデバイスを変更してみました。仮想デバイス到着e1000。問題はまだ存在します。

  3. IPv4を使用してWebサイトに接続しようとすると問題があります。

    # dig A lwn.net
    
    ; <<>> DiG 9.10.3-P4-Ubuntu <<>> A lwn.net
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41423
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;lwn.net.                       IN      A
    
    ;; ANSWER SECTION:
    lwn.net.                2633    IN      A       45.33.94.129
    

    IPv4接続が正常に動作します!

    # wget --no-check-certificate https://45.33.94.129 -O - > /dev/null; echo Exit code: $?
    --2017-08-02 18:41:32--  https://45.33.94.129/
    Connecting to 45.33.94.129:443... connected.
        WARNING: certificate common name `*.lwn.net' doesn't match requested host name `45.33.94.129'.
    HTTP request sent, awaiting response... 200 OK
    Length: 25226 (25K) [text/html]
    Saving to: `STDOUT'
    
    100%[==================================>] 25,226       137K/s   in 0.2s    
    
    2017-08-02 18:41:33 (137 KB/s) - written to stdout [25226/25226]
    
    Exit code: 0
    
  4. 「openssl s_client」を使用して接続を試み、エラーメッセージが表示されていることを確認してください。ただし、openssl s_clientはまだIPv6をサポートしていません(少なくともUbuntu 16.04に含まれているopensslバージョンではサポートされていません)。

  5. 確認済み情報そして/var/log/システムログしかし、そこには関係ありません。

特定のサイトでなぜこのような奇妙な動作が現れるのか知っている人はいますか?次回調査すべき事項についてのアドバイスはありますか?

答え1

仮想マシンのMTUを1492に減らして問題を解決しました。ハイパーバイザーはインターネットへのPPPoE接続の設定を担当し、ppp0インターフェースのMTUは1492バイトです。

IPv4とIPv6の両方がパスMTU検索を実装するのにMTUが問題になるのはなぜですか?それでは、この場合、ルートMTU検索が機能しないのはなぜですか(一部のIPv6ターゲットのみ)。

会ったと思います。ブラックホールここの状況。

Wiresharkを使用していくつかのトラフィックをキャプチャし、tcpdumpファイルをロードしました。添付の図(パケット1-3)に示すように、TCP 3ウェイハンドシェイクを介して接続が行われることを観察しました。これは私の質問の出力でも明らかです。メッセージを印刷した後、wgetがフリーズしているwgetことがわかります。connected3ウェイハンドシェイクが成功した後、クライアント(私の仮想マシン)はSSLを送信します。「こんにちはお客様」メッセージを受信しましたが、受信できませんでした。「こんにちはサーバー」退いてください。クライアントが受信するのは、TCPシーケンス番号に基づいて明らかに不正なパケットです(wiresharkも報告します)。[TCP最後のセグメントがキャプチャされていない]、連続データ)。その後、クライアントは受信した最後の注文パケット(冗長ACK)に対してACK(パケット6)として応答し、サーバーがパケットを再送信しようとすると接続が停止します。パケット損失サポートされているMTUより大きいため、到達できません。したがって、Ctrl+を押してC接続の終了(パケット8-10)を開始するまで、接続は中断されます。

Wireshark キャプチャ

それでは、ルートMTU検索が一部のIPv6ターゲット(すべてではない)でのみ機能するだけでなく、IPv4ではまったく問題がないのはなぜですか?この質問の場合、私のインストールにはIPv6ファイアウォールがないため、特定のWebサイトに行く途中でファイアウォールがブロックされているとします。ICMPv6 パケットが大きすぎるメッセージパスMTU検索が機能するために必要です。興味深いことに、単純なICMPv6 pingパケットが通過して応答を受け取ります。

関連情報