Windows 10をRaspberry Piの後ろに隠す

# Windows 10をRaspberry Piの後ろに隠そう

Windows 10のサポート期間が今年2025年10月14日までとなっています。もうすぐサポート終了ですね。
さて現在私がある場所で使っているWindows 10なのですが、現在はVNCサーバを利用して他のマシンにインストールしたVNCクライアントから操作しております。
現在は他のマシンと同じLAN上にあり、インターネットを使ってWindows Updateも行っています。
さてそのWindows 10マシンなのですが、あるアプリケーションのために使っておりまして、そのアプリケーションは長年更新が止まっていてWindows 11で動く保証はありません。
おそらくWindows 11でも動くであろうと思うのですが、すでにマシン直接操作はしていなくて、VNCを使って操作していることもあり、現在は同じLAN上で他のマシンから直接アクセスしているこのマシンをRaspberry PiにUSB接続Ethernetアダプタをインストールして、Windows 10機はインターネットアクセスを行えなくし、Raspberry Piを経由して操作するやり方に変更しようと思います。
Windows 10機のEthernetはRaspberry PiのUSB Ethernetアダプタとクロスケーブルで直接つなぐように設定しました。最近のEthernetはストレートケーブルを使った直接接続でも問題なく通信できるケースがほとんどなのですが、RJ45コネクタが余っていたのであえてクロスケーブルを作成しました。

#### この説明で使うIPアドレス
Raspbarry Piのボード固定ジャックのIPアドレス：192.168.1.2
Raspbarry PiのUSB EthernetアダプタのIPアドレス：192.168.2.1
Windows 10のEthernetのIPアドレス：192.168.2.2

#### まずはEthernetアダプタを接続する
Raspberry Piの空いているUSBコネクタにEthernetアダプタを接続します。最近のEthernetアダプタの多くは新たなドライバをRaspberry PiにインストールしなくてもOSが認識してくれてドライバをあてがってくれると思いますが、ネットなどで接続が確認されているUSB Ethernetアダプタを使用することをお薦めします。
接続したらEthernetアダプタのハードウェアアドレスを調べてください。
ifconfig等で調べれば通常eth1として現れると思いますのでそのハードウェアアドレスを覚えておいてください。

#### 本体固定のEhternetを確実にeth0、USB Etherをeth1にする
イーサネットのeth0とかeth1といったネットワークデバイスの名前はOSが起動後に見つかった順で割り振られるのですが、本体に固定のEthernetを確実にeth0、新規に接続したUSB Ethernetアダプタにeth1というデバイス名を名付けるためにある設定を行います。
/etc/udev/rules.d/70-persistent-net.rules
というファイルを以下のように記述します。
```70-persistent-net.rules
# ボード付属NIC
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ボード付属NICのハードウェアアドレス", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 
# USB Ether
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="USB Ethernetアダプタハードウェアアドレス", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" 
```
これでRaspberry Piが再起動しても確実にEthernetに意図したデバイス名が割り振られるようになります。

#### USB Ethernetアダプタに固定IPアドレスを設定する
新たに接続したUSB Ethernetアダプタに固定IPアドレスを割り振ります。
/etc/network/interfaces
というファイルに以下のような記述を追加します。
```interfaces
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
```
ここでは 192.168.2.0/24 というネットワークセグメントを設定していますが、eth0のセグメントと被らないように設定してください。なお、今後eth0側のLAN側IPアドレスは19.168.1.2、ネットワークセグメントは 192.168.1.0/24 という前提で話を進めます。

さらに
/etc/dhcpcd.conf
に以下のような記述を追加します。
```dhcpcd.conf
interface eth1
static ip_address=192.168.2.1/24
```
このeth1はWindows 10機との通信専用で、インターネットには接続しません。従いましてデフォルトゲートウェイやDNSサーバの設定は行いません。
これで新しく接続したUSB Ethernetアダプタは再起動しても常に 192.168.2.1 というipv4アドレスが割り振られます。

#### NTPサーバの設定
Windows 10機は2025年10月15日以降はインターネットに接続しません。従いましてパブリックに公開されたNTPサーバを使って時間合わせを行えなくなります。
Raspberry PiのNTPに他のマシンからの時間問い合わせを可能にする設定を行います。
/etc/ntp.conf
を以下のように編集します。
```ntp.conf
...
+restrict ... # すでにあるサーバ設定
+restrict 192.168.2.0 mask 255.255.255.0 # Windows 10機に公開するNTPサーバ
...
```
ntp.confの編集が終わったらntpを再起動します。
```shell
$ systemctl restart ntp
```

#### Windows 10機のEthernet設定を行う
Winodows 10機のraspberry pi eth1と直接接続されるEthernetに固定IPアドレス(192.168.2.2)を割り振ります。
コントロールパネルから「ネットワークと共有センター」を選択し、表示されたウィンドウの左側にある「アダプターの設定の変更」を選びます。表示されたアダプタから「イーサネット」を選択し、表示されたダイアログの「プロパティ」ボタンを押します。表示されたダイアログの「この接続は次の項目を使用します」リストから「インターネットプロトコルバージョン4」を選択し「プロパティ」ボタンを押します。
![ipv4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31696/692ed02b-cf68-44cc-921e-0f4f2d19cfdc.png)
次のIPアドレスを使うラジオボタンをチェックし「IPアドレス」に「192.168.2.2」、サブネットマスクに「255.255.255.0」と入力、「デフォルトゲートウェイ」に何も入力されていない状態にしてください。「次のDNSサーバアドレスを使う」ラジオボタンをチェックし、「優先DNSサーバー」「代替DNSサーバー」ともに何も入力されていない状態にしてください。

#### Windows 10機のインターネット時刻設定を行う
Winodows 10機のNTP設定をraspberry pi eth1(192.168.2.1)に向かうように設定します。
コントロールパネルから「日付と時刻」を選択し、表示されたダイアログボックスから「インターネット時刻」タブを選択し、「設定の変更...」ボタンを押します。
![ntp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31696/80e605af-0e3b-4d16-8ae4-bb191ef72782.png)
表示されたダイアログボックスの「サーバー」テキストフィールドに「192.168.2.1」と入力し「今すぐ更新」ボタンを押します。エラーが表示されなかったらOKボタンを押します。

#### ipv4転送設定
Raspberry Piでeth0とeth1の間でパケットを転送できるように設定します。
/etc/sysctl.conf
を編集します。
```sysctl.conf
net.ipv4.ip_forward=1
```
net.ipv4.ip_forwardの値が0になっていたら1に変更します。
編集したらRaspberry Piを再起動します。

/etc/iptables.ipv4.nat
を編集します。filterテーブルに以下の記述を追加します。
```iptables.ipv4.nat
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
```
iptablesを再起動したら設定が反映されます。

#### VNCルーティング設定
Raspberry Piが受信したNTP(デフォルトポート番号5900)をWindows 10機に転送する設定を行います。再び
/etc/iptables.ipv4.nat
を編集します。natテーブルに以下の記述を追加します。
```iptables.ipv4.nat
-A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to-destination 192.168.2.2:5900
-A POSTROUTING -o eth1 -j MASQUERADE
```
iptablesを再起動したら設定が反映されます。

### アプリケーションが作成したファイルをコピーする機能を追加します。
アプリケーションが作成したファイルが必要ならsambaなどを使って共有ディレクトリを設定し、Windows 10機がファイルをそこに書き込むようにしてください。ここではsambaの設定に関する説明は行いません。
ちなみに、私はsambaに書き込まれたファイルをinotifyで監視して、ファイル更新があった場合に他のマシンにsshやWebDAVを使ってコピーしています。

#### LAN上の他のマシンからVNCアクセスを行う
LAN上の他のマシンから192.168.1.2:5900へのVNC接続を行います。
![connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31696/34227fcc-0435-458e-8513-61cb0a93d0ac.png)
VNCのデフォルトポート番号は5900なのでこの画面ではポート番号の指定は行っておりません。

無事にWindows 10の画面が現れたら成功です。

#### 2025年10月14日を待つ
現在Windows 10機はwifiによってインターネットに接続されていますが、2025年10月14日にBIOS設定で無線LAN機能を無効にします。
これによってWindows 10機からのインターネットアクセスは不可能になり、Raspberry PiのVNCパケット転送でのみWindows 10機への接続が可能となります。