【Windows, WSL2, Docker】外部からのアクセスを可能にする

# はじめに
こんにちはponponnsanです。本日は、社内や遠くにあるサーバーに外部からアクセス可能にする方法を紹介しようと思います。

いつも忘れて検索して、あ、そうだったこれだったを繰り返してしまっているので、この機会にまとめてしまおうと思っています。

# 経緯
社内にあるwindowsサーバーに、VPN経由で在宅中でもアクセスしたい。ただ、毎回あれ、コマンドどうだったっけ...となるので、まとめる。

# 方法
1. windowsのファイアーウォール設定
1. wsl2に外部から接続するための設定

それぞれ手順を見ていきます。

## windowsのファイアーウォール設定
「コントロールパネル」→「システムとセキュリティ」→「Windows Defenderファイアウォール」をクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/fe54ae1a-b35a-091b-1a22-99319a5b9023.png">

「詳細設定」をクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/d35c3de7-23f3-4d69-2432-776accbc5a50.png">


そして、「受信の規則」をクリックしてから、画面右側の「新しい規則」をクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/4b1a4897-ee8e-13d9-2884-b9d55cbdce81.png">

「新規の受信の規則ウィザード」画面が開くので、
「ポート」のラジオボタンをクリックし、「次へ」ボタンをクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/8a49b4bb-6bcf-aa07-13ff-3a2c60a00f6e.png">

「TCP」「特定のローカルポート」のラジオボタンをクリックし、
「特定のローカルポート」の空欄に、今回空けたいポート(今回の例では25565)を入力し、「次へ」
空けたいポートは複数設定可能
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/16bcfad8-092b-6a3a-56f8-24ea981626f0.png">

接続を許可する」のラジオボタンをクリックし、「次へ」ボタンをクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/e2ecb968-959e-7b4d-64ac-13a6473c1c1f.png">

「プライベート」にチェックを入れ、「次へ」ボタンをクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/fa25a2aa-8fec-aff5-82bf-7b6efa62d6d3.png">

任意の名前を入力し、「完了」ボタンをクリック
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1159060/2e5b57d9-4d42-5b62-f90e-eddb9c5628b3.png">


## wsl2に外部から接続するための設定
### WSL2のIPアドレスの確認
:::note warn
PowerShellは管理者権限で実行すること
:::

`wsl -e homename -I`で確認するとシンプルで分かりやすい

ここで複数出てきた人は、一度下記のコマンドでdockerのipを確認した方がいいかもしれません。

```
netsh interface portproxy show all
```
```
Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               80          172.19.90.182   80
```

### ポートフォワードの設定
ちなみにポートフォワードとは、「ポートを右から左へと転送すること」をいうそうで、今私たちがやっているように、windowsで開けたポートをそのままwslに通すことはまさにそのままの意味ですね。

WSL2のIPアドレスがわかれば、ポートフォワーディングして、外部から接続できるか確認します。。
今回は、`172.19.90.182`というipに、全ての接続元からの信号を、先ほどwindowsで開けた任意のポート(例として25565)から、WSL2の同じポートへつながるよう設定をします。


```
netsh interface portproxy add v4tov4 listenaddress=* listenport=25565 connectaddress=172.19.90.182 connectport=25565
```

もう一度、設定されているか確認します。
```
PS C:\Users\pon>  netsh interface portproxy show all

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               25565       172.19.90.182   25565
```

無事、確認できました。

補足として、ポートフォワードの設定は複数を同時に設定することはできないようで、複数ポートを設定したい場合は、ポートを変更し、`netsh interface portproxy add v4tov4 ...`をポート毎に試すしかないようです。

# 参考文献
http://www.fc-center.jp/support/index.php?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%A5%BF%A5%A4%A5%D7/windows%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB%A4%CE%A5%DD%A1%BC%A5%C8%A4%CE%B3%AB%CA%FC/Windows10%A1%A611%A5%D5%A5%A1%A5%A4%A5%A2%A5%A6%A5%A9%A1%BC%A5%EB%A4%CE%A5%DD%A1%BC%A5%C8%A4%CE%B3%AB%CA%FC

https://dareblo.com/open-port-settings/

https://arubeh.com/archives/1749