Windows (WSL)で動いているpodmanマシンにポートフォワード

# 目次
1. はじめに
2. 前提
3. 手順
    3.1 Windows Defenderファイアウォールに受信の規則を追加
    3.2 Podmanマシンにポート転送
4. 参考資料


# 1. はじめに
Windows環境にインストールされたPodmanのコンテナに対して、リモート端末からアクセスするために、ポートフォワードを設定します。本記事ではコンテナがポート8443と9443でhttpリクエストを待ち受けている場合の設定例を紹介します。


# 2. 前提
本記事で使った環境は次の通りです。
- Windows 11 22H2（OSビルド 22621.2715）
- WSL 2.0.9.0
- Podman 4.8.0


# 3. 手順1) Windows Defenderファイアウォールに受信の規則を追加
検索窓に`ファイアウォール`と入力してWindows Defenderファイアウォールを検索し、アプリを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/b9f567fa-cc4b-9fa5-19fd-ef47b542c8d2.png)
画面左の`受信の規則`をクリックし、画面右の`新しい規則`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/b08f6e6e-0fd4-7ada-23a9-1dd46c978939.png)
表示されたポップアップで`ポート`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/af589207-b714-2a31-1907-5a46ab2fa748.png)
`TCP`をクリックし、`特定のロカールポート`をクリックしてWeb画面の待ち受けポート`8443`と`9443`を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/bc809c72-9a2a-286b-7811-ce15844d9714.png)
`接続を許可する`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/c45b408b-400d-158f-fd56-a52871111854.png)
リモート端末の場所に応じて`ドメイン`、`プライベート`、`パブリック`をクリックします。（本記事では`プライベート`が該当）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/322b764c-ca2b-1e1c-d5d0-de3f26c5b532.png)
規則に名前を付けます。（本記事では`watsonx.dataポート開放`）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/d3869260-2992-23a2-5aaa-afc2ad5cebaf.png)
受信の規則を登録できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700959/690e2771-b387-5902-72a3-2a35143d43d9.png)

# 3. 手順2) Podmanマシンにポート転送
PowerShellを起動し、Podmanマシンのシェルを起動します。そこでPodmanマシンのIPアドレスを確認します。本記事の環境では`172.20.233.109`でした。
```
PS C:\Users\xxxx> wsl -d podman-machine-default
[user@DESKTOP-XXXXXXX ~]$ ip address
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:c3:ff:9d brd ff:ff:ff:ff:ff:ff
    inet 172.20.233.109/20 brd 172.20.239.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fec3:ff9d/64 scope link
       valid_lft forever preferred_lft forever
```
PowerShellを管理者として起動し、Windowsマシン（ホストOS）からPodmanマシン（ゲストOS）へのポートフォワードを設定します。下の実行例において`listenaddress`と`connectaddress`にそれぞれWindowsマシンのIPアドレス`192.168.0.77`とPodmanマシンのIPアドレス`172.20.233.109`を設定していますが、環境に合わせてIPアドレスやポート番号を読み替えてください。
```
PS C:\Windows\System32> netsh.exe interface portproxy add v4tov4 listenaddress=192.168.0.77 listenport=9443 connectaddress=172.20.233.109 connectport=9443
PS C:\Windows\System32> netsh.exe interface portproxy add v4tov4 listenaddress=192.168.0.77 listenport=8443 connectaddress=172.20.233.109 connectport=8443
PS C:\Windows\System32> netsh.exe interface portproxy show all
ipv4 をリッスンする:         ipv4 に接続する:
Address         Port        Address         Port
--------------- ----------  --------------- ----------
192.168.0.77    9443        172.20.233.109  9443
192.168.0.77    8443        172.20.233.109  8443

PS C:\Windows\System32> Test-NetConnection -ComputerName 192.168.0.77 -Port 9443
ComputerName     : 192.168.0.77
RemoteAddress    : 192.168.0.77
RemotePort       : 9443
InterfaceAlias   : イーサネット
SourceAddress    : 192.168.0.77
TcpTestSucceeded : True

PS C:\Windows\System32> Test-NetConnection -ComputerName 192.168.0.77 -Port 8443
ComputerName     : 192.168.0.77
RemoteAddress    : 192.168.0.77
RemotePort       : 8443
InterfaceAlias   : イーサネット
SourceAddress    : 192.168.0.77
TcpTestSucceeded : True
```


# 4. 参考資料
- [Podmanの運用・保守系コマンド コピペ用](https://denor.jp/podman%E3%81%AE%E9%81%8B%E7%94%A8%E3%83%BB%E4%BF%9D%E5%AE%88%E7%B3%BB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89-%E3%82%B3%E3%83%94%E3%83%9A%E7%94%A8)