WSL起動時にresolv.confを書き換える
(2023/11/1:更新)
nkf をインストール
$ sudo apt install nkf
systemdを起動する設定
code:wsl.conf
systemd=true
wsl.confを/etc/にコピー
$ sudo cp wsl.conf /etc/
resolv.conf の上書きスクリプト
ホストのWindows 11がネットワークアダプタが使うネームサーバーアドレスを取得して、resolv.conf を上書きするスクリプト set-resolv-conf を systemd で WSL:Ubuntu 起動時に自動実行する。
code:set-resolv-conf
name=/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0//powershell.exe -Command "Get-NetAdapter | Where-Object Status -eq Up | Select-Object -ExpandProperty Name" | nkf -w -Lu
/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0//powershell.exe -Command "Get-DnsClientServerAddress -InterfaceAlias '${name}' -AddressFamily IPv4 | Select-Object -ExpandProperty ServerAddresses" | nkf -w -Lu | sed -e 's/^/nameserver /' > /etc/resolv.conf
実行可能ファイルに設定
$ chmod +x set-resolv-conf
スクリプトset-resolv-confを/usr/local/bin/にコピー
$ sudo cp set-resolv-conf /usr/local/bin/
サービスファイル
WSL起動時に起動するためのサービスファイル
code:set-resolv-conf.service
Description=set resolv.conf
After=network.target
ExecStart=/usr/local/bin/set-resolv-conf
WantedBy=multi-user.target
サービスファイルset-resolv-conf.serviceを/etc/systemd/system/にコピー
$ sudo cp set-resolv-conf.service /etc/systemd/system/
サービスの有効化
$ sudo systemctl enable set-resolv-conf.service