Windowsでのルーティング

# Windows10にてルーティング周辺
ネットワークカードを購入し、複数ネットワークを構築できる環境ができたので、Windows10にて、ルーティング周辺の調査をした際の備忘録。

## ルーティング
”Routing and Remote Access”サービスが有効化されている必要がある。
![Service.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f0de7871-cc77-a931-8e30-d810dbec87a6.png)
有効化後、”route”コマンドでルートを追加する。
```
> route ADD 157.0.0.0 MASK 255.0.0.0  157.55.80.1 METRIC 3 IF 2
```
基本的に、相手側もルーティング（スタティックルートなど）しておく必要がある。

## NAT
Windowsのインターネット共有を使うのが常套手段。下記は共有される側の設定。
![インターネット共有のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4a59d608-3b13-1e59-e703-fb3ed6343eb9.png)
共有設定後、共有する側のインターフェースには、IPアドレス”192.168.137.1”が割り当てられることが多い。
![共有その２のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/09a28734-62f2-27b6-3be3-7e3bfaf99f79.png)
そして、そのインターフェースに接続されたクライアントには、DHCPによりIPアドレスが配布される。
![Captureのコピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/81c337e5-edfc-5672-2dfd-8ca64acf9ccc.jpeg)

## Port Forward
### まずは情報
WindowsでのPort Forwardに関しては、下記の記事などが見つかる。
1. [Windowsでポートフォワーディング、Linuxでポートフォワーディング](http://tdsen.blog.jp/archives/68593940.html)
1. [Windowsサーバでポートフォワーディングを使ってみた](https://it-study.info/windows-port-forwarding/)
1. [Steps to configure port forwarding on windows using netsh](https://bobcares.com/blog/configure-port-forwarding-on-windows-using-netsh/)

最初の２つの記事を見て設定を行い、テストしたが動作せず。あれこれトライして、Windows Defenderを無効化すると動作。同時に3番目の記事が見つかる。

### 検証環境
検証環境は下記となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7f9cbf80-c420-fd96-4d6e-390e9561f3b3.png)
Windows PCは、２つのIPアドレス192.168.2.29および172.16.20.1を所持する。192.168.2.29かつTCPポート11111に来たデータを、IPアドレス172.16.20.33のTCPポート22222に転送する。

### 設定
Windows PCでの実際の設定状況は下記となる。
```
C:\WINDOWS\system32>netsh interface portproxy add v4tov4 listenport=11111 listenaddr=* connectport=22222 connectaddress=172.16.20.33
C:\WINDOWS\system32>netsh interface portproxy show all
ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               11111       172.16.20.33    22222

C:\WINDOWS\system32>netsh advfirewall firewall add rule name="allow11111" protocol=TCP dir=in localport=11111 action=allow
OK

C:\WINDOWS\system32>netsh advfirewall firewall show rule name="allow11111"

規則名:                               allow11111
----------------------------------------------------------------------
有効:                                 はい
方向:                                 入力
プロファイル:                         ドメイン,プライベート,パブリック
グループ:
ローカル IP:                          任意
リモート IP:                          任意
プロトコル:                           TCP
ローカル ポート:                      11111
リモート ポート:                      任意
エッジ トラバーサル:                  いいえ
操作:                                 許可
OK
```
この設定後、GUIでのFirewall状況は下記となった。
![Allow11111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/0eef0f39-755e-977b-a48d-e46a5926c120.png)

### 検証
#### コマンド
nc(netcat)を利用。Client(192.168.2.1)にて下記コマンドを実行。
```
$ echo abc123 | nc 192.168.2.29 11111
```
Server(172.16.20.33)に下記コマンドを実行（および結果）。
```
$ nc -l 22222
abc123
```
Clientからのデータを受信できている。

#### パケットキャプチャ
上記コマンド実行時のキャプチャデータである。
##### Client - Windows PC
![Wireshark1のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/6668a8ce-ffca-c37b-12b3-72103c57c36e.png)
##### Windows PC - Server
![Wireshark2のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4734c4ea-5a6d-32b1-994f-7c01ebe242e6.png)
正しく、Port Forwardされている様子が伺える。

### その他
- インターネット共有（NAT）時も同様に動作した。
- 上述したルーティングに関しては、ICMP(ping)でのみしか確認していない。ここでの記述にあるように、単なるルーティングでもTCPやUDPに関しては、Firewallを考慮する必要がありそうだ。
- Port Forwardには、上述した”Routing and Remote Access”サービスが有効化されている必要はないようだ。

EOF