なにもしていないWSL2ではIPアドレスがコロコロかわり不便でした。仕様なんだろうとずっと思いこんでいましたし、IPv6も設定できないわけではないが面倒だとも...
ところが最近になって、wsl2でバインドするインターフェースとmac addressを指定することができる、IPv6を設定できるというのを知りました。ただしWindows11のみですが...ということは、DHCP経由ではありますが、固定IPを設定できるのでは?とおもいやってみたところ、Windows11ではIPv4/IPv6ともに固定IPを割り当てできたので備忘録として挙げてみました。
2023/04/26追記:なお、IPv6についてはwsl2でsystemdを起動させ/etc/network/interfaces.d/eth0経由でdhcpにてアドレス取得するようにしました。systemdをwsl2で起動させるには、/etc/wsl.confを作成し、以下のようにします。
1. 今回は外部仮想スイッチを作成するので、”どの種類の仮想スイッチを作成しますか”では”外部”を選択して仮想スイッチを作成します。
2. 仮想スイッチのプロパティーで名前を今回は WSL2_EXTNL とし、外部ネットワークで接続させたいインターフェースを選択し、OKボタンをクリックします。
仮想スイッチの設定は以上です。つづいて.wsconfigを作成します。場所はMyUserがユーザー名だとしたら、C:\Users\MyUser\.wslconfigで作成します。作成にはnotepadが使えますので以下のようにします。
今回は以上です。それでは。
ところが最近になって、wsl2でバインドするインターフェースとmac addressを指定することができる、IPv6を設定できるというのを知りました。ただしWindows11のみですが...ということは、DHCP経由ではありますが、固定IPを設定できるのでは?とおもいやってみたところ、Windows11ではIPv4/IPv6ともに固定IPを割り当てできたので備忘録として挙げてみました。
2023/04/26追記:なお、IPv6についてはwsl2でsystemdを起動させ/etc/network/interfaces.d/eth0経由でdhcpにてアドレス取得するようにしました。systemdをwsl2で起動させるには、/etc/wsl.confを作成し、以下のようにします。
[boot] systemd=true2023/05/16追記:/etc/network/interfaces.d/eth0は今回は以下のようにしました。
auto eth0 iface eth0 inet6 dhcp次に、仮想スイッチ作成のため、HyperVマネージャを立ち上げます。続いて仮想スイッチマネージャを開きます。ここで新規に仮想スイッチを作成するのですが、
1. 今回は外部仮想スイッチを作成するので、”どの種類の仮想スイッチを作成しますか”では”外部”を選択して仮想スイッチを作成します。
2. 仮想スイッチのプロパティーで名前を今回は WSL2_EXTNL とし、外部ネットワークで接続させたいインターフェースを選択し、OKボタンをクリックします。
仮想スイッチの設定は以上です。つづいて.wsconfigを作成します。場所はMyUserがユーザー名だとしたら、C:\Users\MyUser\.wslconfigで作成します。作成にはnotepadが使えますので以下のようにします。
[wsl2] networkingMode=bridged vmSwitch=WSL2_EXTNL macAddress=aa:bb:cc:dd:ee:ff dhcp=true ipv6=trueつついてdhcpサーバでipv4を固定で割り当てるようにします。dhcp serverがisc-dhcp-serverでの場合ですが、dhcpd.confに以下のように追加します。
host myWsl2 { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address 192.168.1.117; }なお筆者の環境の場合、このネットワークのIPv6プレフィクスレングスは64ですが、DHCPv6でアドレスを割り振るように設定しています。
subnet6 2600:1111:2222:3333::/64 { range6 2600:1111:2222:3333::1 2600:1111:2222:3333::ffff; option dhcp6.name-servers 2606:4700:4700::1111, 2606:4700:4700::1001; host wsl2 { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address6 2600:1111:2222:3333::44; } }参考までに/etc/radvd.confは以下のようにしています。
interface enp3s0 { AdvSendAdvert on; AdvManagedFlag on; AdvOtherConfigFlag on; MaxRtrAdvInterval 180; prefix 2600:1111:2222:3333::/64 { }; };ここまで設定できたら、serverでdhcpdとradvdを再起動し、クライアント側ではpowershellでwslをシャットダウンさせます。
wsl --shutdownシャットダウン後、wsl2を起動し、意図したIPv4アドレスとIPv6アドレスが割り当てられているとOKです。
6: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc mq state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff inet 192.168.1.117/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2600:1111:2222:3333::44/128 scope global dynamic mngtmpaddr valid_lft 86333sec preferred_lft 14333sec inet6 fe80::aaaa:bbbb:cccc:dddd/64 scope link valid_lft forever preferred_lft foreverなお、Windowsは11 pro 22h2で確認しました。(Windows10では残念ながら対応していないようです。 https://github.com/microsoft/WSL/discussions/9227 より)
今回は以上です。それでは。
コメント
コメントを投稿