2023-09-08
Windows11+WSL2でUbuntuを使う【1】インストール
WSLを外部からアクセスできるサーバーとして使いたいので、ホストWindowsと同格のネットワークのIPをもらうブリッジ接続を設定し、さらにネットワーク内固定IPを設定する。
Hyper-Vシステムを有効にする
デフォルトではインストールされていないが、Windows11 ProにはHyper-Vが付属する。まずこれを有効にする。
コントロールパネル→プログラム→Windowsの機能の有効化または無効化
トップレベルの「Hyper-V」項目にチェックを入れる。(その下サブツリーすべてにチェックが入る)。
で「OK」としてインストール、必要な変更が完了しました→今すぐ再起動
再起動後、
コントロールパネル→システムとセキュリティ→Windowsツール→Hyper-Vマネージャーを開く
左ペインのマシン名をクリックして、右の「操作」パネルにある「仮想スイッチマネージャー」を起動
新しい仮想ネットワークスイッチ→仮想スイッチの作成→「外部」を選択し「仮想スイッチの作成」
名前「External」などとする。
「接続の種類」を「外部ネットワーク」を選択し、
プルダウンは物理ネットワークアダプターを選ぶ(Intel Proなど)。
「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」をチェック。
「OK」で閉じて、ネットワーク設定を更新する。一時的にネットが遮断される可能性あり。
コマンドプロンプトを起動して、
ipconfig イーサネット アダプター vEthernet (External):
などと、物理ネットワークアダプタに、設定した「External」がついていればOK。
ホームフォルダ直下に.wslconfigファイルを作成
通常であれば、
C:\Users\hogeuser\.wslconfig
というWSLに対する指示ファイルを手動作成する。以下の内容を書く。
[wsl2] networkingMode=bridged vmSwitch=External dhcp=true ipv6=true
ipv6が不要なら、ipv6行は記述しなくてよい。
WSLを再起動しブリッジネットワークの確認をする
スタート→ PowerShell右クリック→管理者として実行
PowerShell 7.3.6
wsl --shutdown wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2 wsl
とし、WSLの再起動をする。そのままプロンプトに入るので、IPがもらえているか確認する。
ip a 1: lo: <loopback> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <broadcast> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 5c:bb:f6:9e:ee:fa brd ff:ff:ff:ff:ff:ff inet 192.168.1.9/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2405:6580:cd40:4f00:5ebb:f6ff:fe9e:eefa/64 scope global dynamic mngtmpaddr valid_lft 14254sec preferred_lft 12454sec inet6 fe80::5ebb:f6ff:fe9e:eefa/64 scope link valid_lft forever preferred_lft forever </broadcast></loopback>
eth0に、ちゃんと192.168.1.9/24という、ホストWindowsと同格のネットワークIPがもらえていることを確認。
これで、別のマシンから192.168.1.9=WSLにアクセスできることになる。
固定IPの設定を行う
このままだと起動のたびにIPが変わってしまうので、WSL内で固定IP設定記述ファイルを設置する。
/etc/netplan/99-static-ip.yaml
sudo -s cd /etc/netplan cat > 99-static-ip.yaml
内容は以下のような感じ
network: version: 2 ethernets: eth0: dhcp4: false dhcp6: true addresses: - 192.168.1.33/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.1
ホストネットワークのゲートウェイ、DNSサーバがともに192.168.1.1である場合の設定。
192.168.1.33を固定IPとしている。dhcp4: falseとするのがポイント。
ネットワークに反映する。
sudo -s netplan apply WARNING: systemd-networkd is not running, output will be incomplete. Failed to reload network settings: No such file or directory Falling back to a hard restart of systemd-networkd.service
なんかエラーが出てしまった。これ、どうやらsystemd-networkdが立ち上がってないぞ、ということっぽいが、そんなことあり得るのだろうか・・??
systemctl status systemd-networkd ● systemd-networkd.service - Network Configuration Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled) Active: active (running) since Fri 2023-09-08 18:05:52 JST; 46min ago TriggeredBy: ● systemd-networkd.socket Docs: man:systemd-networkd.service(8) Main PID: 644 (systemd-network) Status: "Processing requests..." Tasks: 1 (limit: 19166) Memory: 2.8M CGroup: /system.slice/systemd-networkd.service └─644 /lib/systemd/systemd-networkd Sep 08 18:05:52 Artria-Win systemd[1]: Starting Network Configuration... Sep 08 18:05:52 Artria-Win systemd-networkd[644]: eth0: Link UP Sep 08 18:05:52 Artria-Win systemd-networkd[644]: eth0: Gained carrier Sep 08 18:05:52 Artria-Win systemd-networkd[644]: lo: Link UP Sep 08 18:05:52 Artria-Win systemd-networkd[644]: lo: Gained carrier Sep 08 18:05:52 Artria-Win systemd-networkd[644]: eth0: Gained IPv6LL Sep 08 18:05:52 Artria-Win systemd-networkd[644]: Enumeration completed Sep 08 18:05:52 Artria-Win systemd[1]: Started Network Configuration. ps aux | grep systemd root 46 0.0 0.0 47820 15284 ? S<s root ss systemd message snote pts s grep> systemd-networkdは存在している。もう一度やってみた。 <pre> netplan apply今度は何もエラー無く完了。さて、固定IPが付与されているか見てみる。
ip a 1: lo: <loopback> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <broadcast> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 5c:bb:f6:9e:ee:fa brd ff:ff:ff:ff:ff:ff inet 192.168.1.33/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2405:6580:cd40:4f00:5ebb:f6ff:fe9e:eefa/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 14360sec preferred_lft 12560sec inet6 fe80::5ebb:f6ff:fe9e:eefa/64 scope link valid_lft forever preferred_lft forever </broadcast></loopback>99-static-ip.yamlのとおりに設定されている。ゲートウェイへPINGしてみてチェック。
ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=1.22 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=1.18 ms ^C --- 192.168.1.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.179/1.201/1.223/0.022 ms問題なし。どうもWSLってデーモンが自動で立ち上がってくれないことがある。networkdもそれか…?次回以降でそのあたりの自動起動まわりも要調査ですね。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
macOSに標準付属のApacheを自動起動つきで動かす
HomeBrewでPostgreSQLを入れて自動起動つきで動かす
Windows版Google Driveが使用中と言われアンインストールできない場合
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
進研ゼミチャレンジタッチをAndroid端末化する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Googleスプレッドシートで図形をコピーして使いまわすには
【Linux】iconv/libiconvをソースコードからインストール
【Apache】サーバーに同時接続可能なクライアント数を調整する
Pythonで処理にかかった時間を計測するには
Windows11のコマンドプロンプトでテキストをコピーする