Windowsホスト上でIPアドレスが固定されたUbuntu(Wireguard)を使いたい
お久しぶりです。コンタクトを使い切ってしまったのですが、今朝かばんから2枚出てきました。ハッピーです。
WindowsホストのPCをVPNサーバ、内部公開のWebサーバとして使っているのですが、少し不便だったので変更を加えたので備忘録です。
変更目的は以下の2点です。
Wireguardは引き続き使いたい
Windowsは残したい
調べているとWindowsホストに直接Wireguard(サーバ)をインストールするためにコーディングした方がいるみたいです。いやはやすごいですね。素晴らしいです。ですがエラーが発生したときのトラブルシュートが面倒複雑なのと、何よりメンテナンスされなくなったときが怖いので今回の選択肢からは外します。
要件を整理すると以下の通りです。
Windowsのホストの設定を変更するのは最小限に
UbuntuのIPは固定する
Ubuntuは自動起動させる
1. WSLを使用する(変更前の構成)
僕が使ってたパターンです。WSLがsystemdに対応した、だのファイル共有がいい、だの謳っていたので使えるかを実験的にやってみました。ナレッジとして一応残しておきます。
以下で実現可能に感じたのです。
wslをインストール
wsl上にWireguardをインストール
IPマスカレードを設定(ホストの51820ポートに着信したパケットをwslに渡す)
wslを常時起動
ですが、結論から言うとうまくいきませんでした。課題は4です。
タスクスケジューラを使用して常時起動させればええやん、と思いますがどうもうまくいきません。コマンドで直接wsl.exeを実行するように設定、wsl.exeを実行する.batファイルを作成して.batファイルを起動するように設定、実行するユーザをAdministratorに変更、実行するファイルのパーミッションの変更、wslでWireguardを構築したユーザで実行させる、構築したユーザが実行するパスをタスクスケジューラで指定でなどなど思いつくものを一通り試したのですが無理でした。また、Windowsのサービスに登録すればええやん、ということでsexeを使ってみたりしましたがなぜか起動しません。。。WSL難しいです。
というかWSLってログが揮発しちゃうという記事を見た気がします。このような使い方は想定していないのでしょう。真面目にwireguard側のトラブルシューティングをするとなると、別途syslogサーバを立てなきゃなのでイケてませんよね。
※3についてはインターネットで日本語の記事が複数あります。普通にうまくいきますがネットワークの知識が必要なのでお勧めしません。ネットワークでハマっているのか、Linuxでハマっているのか、wslでハマっているのか、知識がないと厳しい気がします。
2. Hyper-Vを使用する(変更後の構成)
Hyper-VでUbuntuの仮想マシンを作成
仮想マシンにWireguardをインストール
IPアドレスを固定
仮想マシンを常時起動
1、2は簡単なので割愛します。
3のIPアドレスを固定について、WindowsホストでNATする方法、仮想マシンが直接IPをもらってくる、という2種類の方法が思いつきます。
NATする方法はインターネット上に記事がたくさんあるのですが、Windowsホストの設定を極力触りたくないので仮想マシンが直接IPをもらってくる方法を採用します。
まずはHyper-Vで直接IPをもらってこられるように設定します。
仮想マシンの設定を開き、ネットワークアダプターの「仮想スイッチ」で「External」を選択します。
続いて指定のIPを使用するため、仮想マシン上で以下のコマンドを実行していきます。
設定ファイルをコピーしてバックアップ
cd /etc/netplan
sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak
設定ファイルの書き換え
以下のコマンドを実行し、以下を参考に中身を書き換えます。
sudo nano 01-network-manager-all.yaml
### 01-network-manager-all.yaml
network:
ethernets:
eth0:
addresses:
- 192.168.1.133/24 # 仮想マシンに設定するIPアドレス
nameservers:
addresses: [94.140.14.14, 94.140.15.15] # DNSサーバ8.8.8.8とかでもよい
routes:
- to: default
via: 192.168.1.1 # 自宅のルータIPアドレス
version: 2
以下を実行して設定ファイルを適用します。
sudo netplan apply
僕が実行したときは、エラーメッセージが出て怒られたのでご指摘の通りMetworkManager自体を以下のコマンドで再起動してあげました。
sudo systemctl restart systemd-networkd.service
一応ステータスを確認するとよいです。
systemctl status systemd-networkd.service
● systemd-networkd.service - Network Configuration
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled)
Active: active (running) since Sun 2023-10-22 12:50:11 JST; 1h 2min ago
TriggeredBy: ● systemd-networkd.socket
Docs: man:systemd-networkd.service(8)
Main PID: 403 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 4631)
Memory: 2.7M
CPU: 140ms
CGroup: /system.slice/systemd-networkd.service
└─403 /lib/systemd/systemd-networkd
10月 22 12:50:11 hatomugicha systemd[1]: Started Network Configuration.
10月 22 12:50:11 hatomugicha systemd-networkd[403]: eth0: Link UP
10月 22 12:50:11 hatomugicha systemd-networkd[403]: eth0: Gained carrier
10月 22 12:50:12 hatomugicha systemd-networkd[403]: eth0: Gained IPv6LL
10月 22 13:00:59 hatomugicha systemd-networkd[403]: eth0: found matching network '/run/systemd/network/10-netplan-eth0.network', based on p>
10月 22 13:00:59 hatomugicha systemd-networkd[403]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.network
10月 22 13:00:59 hatomugicha systemd-networkd[403]: eth0: DHCPv6 lease lost
10月 22 13:00:59 hatomugicha systemd-networkd[403]: eth0: found matching network '/run/systemd/network/10-netplan-eth0.network', based on p>
10月 22 13:00:59 hatomugicha systemd-networkd[403]: eth0: Re-configuring with /run/systemd/network/10-netplan-eth0.network
10月 22 13:00:59 hatomugicha systemd-networkd[403]: eth0: DHCPv6 lease lost
指定したIPアドレスが取得できているはずです。
ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> 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,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.133/24 brd 192.168.1.255 scope global eth0
残すは4の仮想マシンの常時起動ですが、Hyper-Vマネージャを開き、該当の仮想マシンを右クリックして「設定」をクリック、「自動開始アクション」を編集することで実現可能です。
補足
Macアドレスを固定してルータ側でIPアドレスを振ればよくない?
WSL、Hyper-VともにMacアドレスを固定するのは推奨していない
デフォルトでは再起動したら勝手にMacアドレスが変わる仕様になっている
そもそも2023年現在ではセキュリティ的にランダムにMacアドレスを変更していくのが流行ってますからね。。
01-network-manager-all.yamlの先頭の01の意味は?
ファイルが複数存在したときの優先される順序のようです
01よりも02の方が優先される、02よりも90の方が優先されるといった具合みたい
仮想マシンのUbuntuにサーバ以外からRDPでアクセスしたい。なぜかHyper-Vを動かしているサーバ以外からRDPセッションを張れない
昨日的にはUbuntu側の設定で「共有」という項目でUbuntu2204LTSから設定できるようになってます
上記で行けるはずなのですが、Ubuntu側の作りが甘いみたいです。以下の記事で行けそうです。
ということで、僕は美術館に行ってきます。よい一日を!!