QUIC を試してみた

こんにちは masm11 です。 QUIC の RFC が出ましたね。

https://datatracker.ietf.org/doc/html/rfc9000

5月なので2ヶ月も前ですが… というわけで、今回は遅ればせながら QUIC を試してみたいと思います。

nginx を設定

まず、nginx を QUIC 対応版にします。Arch Linux を使っているので AUR からインストールします。

wget https://aur.archlinux.org/cgit/aur.git/snapshot/nginx-quic.tar.gz
tar zxf nginx-quic.tar.gz
cd nginx-quic 
makepkg -s
sudo pacman -U nginx-quic-1.21.0-3-x86_64.pkg.tar.zst

そして /etc/nginx/nginx.conf を設定します。

server ブロックに以下のように quic と http3 を指定します。

   server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        listen       443 quic http3;
        listen       [::]:443 quic http3;

server ブロックに以下の一行を追加します。

       add_header Alt-Svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';

これは「QUIC も使えるよ〜」という宣言です。

nginx を restart します。

sudo systemctl restart nginx

軽く確認してみます。

shiro:nginx % sudo ss -lnp | grep :443
udp   UNCONN 0      0             0.0.0.0:443              0.0.0.0:*     users:(("nginx",pid=21153,fd=9),("nginx",pid=21152,fd=9))
udp   UNCONN 0      0                [::]:443                 [::]:*     users:(("nginx",pid=21153,fd=10),("nginx",pid=21152,fd=10))
tcp   LISTEN 0      511           0.0.0.0:443              0.0.0.0:*     users:(("nginx",pid=21153,fd=7),("nginx",pid=21152,fd=7))
tcp   LISTEN 0      511              [::]:443                 [::]:*     users:(("nginx",pid=21153,fd=8),("nginx",pid=21152,fd=8))
shiro:nginx % 

TCP に加えて UDP も bind してますね。

ファイアウォールに穴を開ける

使っているツールによりますが、iptables ならこんな感じでできます。

sudo iptables -I INPUT -p udp --destination-port 443 -j ACCEPT

確認

ではブラウザからアクセスしてみましょう。

サーバで以下のように実行しておき、

sudo tcpdump -i ens3 -n -s 0 -w cap.dat port 443

Firefox からアクセスしてみます。

Firefox のデベロッパーツールで見ると、alt-svc ヘッダと HTTP/3 であることが確認できます。

f:id:masm11:20210716215941p:plain

また、tcpdump が生成した cap.dat を手元にコピーして wireshark で見ると、 QUIC で通信できていることが確認できます。

f:id:masm11:20210716215953p:plain

なお QUIC は、まずは TCP でアクセスし、UDP で接続できそうなら (alt-svc で指定されていたら) 次から UDP を使います。なので、最初のうちは TCP になります。 確認する際は多少まとまった通信をした方が良いです。

まとめ

今回は QUIC をテストしてみました。 最新技術っていいですよね 。

インゲージでは最新技術もわくわくなエンジニアを募集しています。以下のページからお願いします。

https://ingage.co.jp/recruit/