ConoHa の VPS に Red Hat Enterprise Linux 9 をインストールして、Web サーバーやメールサーバーの構築をしてきました。
今回はこのサーバーを IPv6 に対応させていきます。
ネットワークインターフェイス(eth0)の設定変更
ConoHa の公式サイトに手順が載っていますので、その通り進めます。
IPv6 の複数アドレスに関しては必要性を感じなかったので、セカンダリーは設定しませんでした。
1 2 3 4 5 6 | IPV6_AUTOCONF="no" #yesをnoへ変更 #下記を追記 IPV6ADDR=IPv6アドレス IPV6_DEFAULTGW=コントロールパネルで確認できる「ゲートウェイ」のアドレス IPV6FORWARDING=yes |
ネットワークマネージャーをリスタートして反映させます。
1 | # systemctl restart NetworkManager |
DNS の編集
ConoHa の管理画面から DNS を開き、AAAA レコードを 2 つ追加します。
AAAA レコード(追加)
ドメインのレコードを設定する。
- タイプ:AAAA
- 名称:@
- 値:IPv6 アドレス
サブドメインに対してワイルドカードでレコードを設定する。
- タイプ:AAAA
- 名称:*
- 値:IPv6 アドレス
SPF レコード(修正)
既存の SPF レコードに対して、IPv6 アドレスも追加する。
- タイプ:TXT
- 名称:@
- 値:v=spf1 +ip4:(IPv4 アドレス) +ip6:(IPv6 アドレス) -all
PTR レコード
続いて、逆引きホスト名の設定も入れていきます。
ConoHa 管理画面からサーバーを表示し、IPv6 の PTR レコードを編集します。
サーバーに割り振った IPv6 アドレスの逆引きホスト名を指定して保存します。
ファイヤーウォールの設定
以前設定した nftables をベースに設定を変更していきます。
nftables の設定ファイルで、ip protocol(IPv4 のルール)に対応した ip6 nexthdr(IPv6 のルール)を追加していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | # 現在のルールセットを消去 flush ruleset # 管理者用IPアドレスリストを読み込む include "/etc/nftables/list/admin" # 日本国内IPアドレスリストを読み込む include "/etc/nftables/list/domestic" # IPv4 & IPv6 table inet filter { set admin { type ipv4_addr elements = $admin } set domestic { type ipv4_addr flags interval elements = $domestic } chain input { type filter hook input priority 0; policy drop; # Ping floods ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept ip protocol icmp icmp type echo-request limit rate 10/second accept # 関連・確立済みトラフィックは許可する ct state established,related accept # 不正なトラフィックは全て破棄する ct state invalid drop # ループバックインターフェイスのトラフィックは全て許可する iif lo accept # Neighbor Discovery を許可する ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept # 新しいエコー要求 (ping) は許可する ip6 nexthdr icmpv6 icmpv6 type echo-request ct state new accept ip protocol icmp icmp type echo-request ct state new accept ip6 nexthdr udp ct state new jump UDP ip protocol udp ct state new jump UDP #ip6 nexthdr tcp tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP #ip protocol tcp tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP meta l4proto tcp tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP # 他のルールによって処理されなかったトラフィックは全て拒否する ip6 nexthdr udp reject ip protocol udp reject ip6 nexthdr tcp reject with tcp reset ip protocol tcp reject with tcp reset } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy accept; } chain TCP { # 管理者にのみ解放 # ssh, OLS 管理画面 tcp dport { 22, 7080 } ip saddr @admin accept # 日本国内にのみ開放 # SMTPS, IMAPS tcp dport { 465, 993 } ip saddr @domestic accept # 全開放 # SMTP, HTTP, HTTPS tcp dport { 25, 80, 443 } accept } chain UDP { # 全開放 # http/3 udp dport { 443 } accept } } |
参考サイトにしっかり書いてあったのですが、Neighbour Discovery を許可する設定を入れないと IPv6 が切断されてしまう現象でハマりましたのでご注意ください。
※上記の設定だと MUA(Thunderbird など)が IPv4 で日本国内からしか到達できない状態ですが、アクセスする環境が IPv6 に対応していないため割り切って使っています。必ず自分の環境にあった設定を確認してください。
nftables を再起動して反映します。
1 | # systemctl restart nftables |
IPv6 を有効にするサービスの設定
OpenLiteSpeed
リスナーの追加
OLS の管理画面から「リスナー」を開き、新しいリスナーを追加します。
- リスナー名:(任意)
- IP アドレス:[ANY] IPv6
- ポート:443
- セキュア:はい
バーチャルホストマップの割り当て
作成したリスナーにバーチャルホストマップを割り当てます。
プルダウンから設定済みのバーチャルホストを選択し、ドメインと紐づけます。
SSL の設定
作成したリスナーの「SSL」のタブを開き、SSL の設定を追加します。
- 秘密鍵ファイル:Let's Encrypt で取得した privkey.pem へのパス
- 証明書ファイル:Let's Encrypt で取得した fullchain.pem へのパス
- 証明書チェーン:はい
- プロトコルバージョン:TLS v1.2、TLS v1.3
- SSL再交渉保護:はい
- ALPN:SPDY/3、HTTP/2、HTTP/3
- Open HTTP3/QUIC (UDP) Port:はい
設定を保存したら、OLS を再起動しましょう。
Postfix
Postfix の設定で inet_protocols に all が指定されていれば、IPv4 と IPv6 両方が有効になっています。
1 2 | # postconf | grep ^inet_protocols inet_protocols = all |
inet_protocols が ipv4 の場合は /etc/postfix/main.cf を修正して、Postfix を再起動します。
Dovecot
Dovecot の設定で listen に「*, ::」が指定されていれば、IPv4 と IPv6 両方が有効になっています。
1 2 | # doveconf | grep ^listen listen = *, :: |
listen が「*」の場合は /etc/dovecot/local.conf(もしくは /etc/dovecot/dovecot.conf)を修正して、Dovecot を再起動します。
確認
Web サーバーと、メールサーバーが正しく設定されているかチェックしておきましょう。
追記
WordPress の LiteSpeed Cache プラグインで QUIC.cloud と連携して画像を WebP に置換していましたが、最適化要求(Gather Image Data)で画像を渡すことはできても、画像を引き戻す(Pull Images)際に受け取れない状況になってしまっていました。
OpenLiteSpeed で /wp-admin に対して IP アドレスで制限をかけていたのですが、自サーバーの IPv6 アドレスを許可リストに追加することで解決しました。
コメント