外出(モバイルルータ使用)時の名前解決設定の自動切り替え - aktnk/til GitHub Wiki

解決したいこと

  • ノートPCで外出時モバイルルータを使用した際、WSL2のUbuntuの名前解決ができない

現状

  • 自宅環境ではローカルLAN(192.168.0.0/24)内の名前解決に専用DNSサーバを立ち上げ利用している
  • ノートPCのOSはWindwos 11 professional
  • ノートPCにはWSL2をインストールし、Ubuntu-20.04LTSを導入している
  • WSL2上のUbuntuの/etc/resol.confにはnameserver (専用DNSサーバのIPアドレス)を設定している
  • モバイルルータのネットワークは192.168.179.0/24を設定している

名前解決ができない原因

  • /etc/resol.confにはnameserver (専用DNSサーバのIPアドレス)を固定的に設定しているため、モバイルルータのネットワークに接続した際、アクセスできないDNSサーバに名前解決をしている

対策案

  1. モバイルルータのネットワークをローカルLANと同じ192.168.0.0/24に設定する
  2. WSL2 Ubuntu起動時に/etc/resolv.confを適切なDNSサーバを参照するように書き換える

→ 対策2.を採用する

(理由)

  • 自宅環境内でモバイルルータに接続して使用できるようにしたいため、対策1.は却下

対策内容

  • /usr/local/bin/set-resolv-confを配置
    #!/bin/bash
    /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0//powershell.exe -Command "route print 0.0.0.0" | awk '{ if ($1 == "0.0.0.0") { print $3 }}' | sed -e 's/^/nameserver /' > /etc/resolv.conf
    
    • set-resollv-confに実行権限を付与しておくこと
      # chmod +x /usr/local/bin/set-resolv-conf
      
  • /etc/systemd/system/set-resolv-conf.serviceを配置
    [Unit]
    Description=set resolv.conf
    After=network.target
    
    [Service]
    ExecStart=/usr/local/bin/set-resolv-conf
    
    [Install]
    WantedBy=multi-user.target
    
    • /etc/wsl.confsystemdが有効になっていること、resolvconfの生成をオフにしておくこと
      [boot]
      systemd=true
      [network]
      generateResolvConf=false
      
  • set-resolv-confサービスが自動起動するように設定しておくこと
    # systemctl enable set-resolv-conf
    
    • 設定後、エラーが出ていないことを確認する
      # systemctl status set-resolv-conf
      ● set-resolv-conf.service - set resolv.conf
           Loaded: loaded (/etc/systemd/system/set-resolv-conf.service; enabled; vendor preset: enabled)
           Active: inactive (dead) since Sat 2025-01-18 21:14:51 JST; 1h 2min ago
          Process: 396 ExecStart=/usr/local/bin/set-resolv-conf (code=exited, status=0/SUCCESS)
         Main PID: 396 (code=exited, status=0/SUCCESS)
      
      Jan 18 21:14:51 GBA5X1 systemd[1]: Started set resolv.conf.
      Jan 18 21:14:51 GBA5X1 systemd[1]: set-resolv-conf.service: Succeeded.
      
  • 動作確認:下記2点を確認すること
    • 自宅のローカルLAN接続した際、モバイルルータに接続した際、/etc/resolv.confがデフォルトゲートウェイのIPアドレスになっていること
    • Ubuntu上から、www.googole.co.jp等の名前解決ができること