こんにちは 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 であることが確認できます。
また、tcpdump が生成した cap.dat を手元にコピーして wireshark で見ると、 QUIC で通信できていることが確認できます。
なお QUIC は、まずは TCP でアクセスし、UDP で接続できそうなら (alt-svc で指定されていたら) 次から UDP を使います。なので、最初のうちは TCP になります。 確認する際は多少まとまった通信をした方が良いです。
まとめ
今回は QUIC をテストしてみました。 最新技術っていいですよね 。
インゲージでは最新技術もわくわくなエンジニアを募集しています。以下のページからお願いします。