PowerVS IBM i 日記(67): PER 環境の利用(4) - VPC Linux の sshd 経由で 5250 接続する

# PowerVS のパブリック・ネットワークを使わないテスト環境での 5250 接続

「[PowerVS IBM i 日記(64): PER 環境の利用(1) - PER 環境を用意する](https://qiita.com/6onoda/items/21e8f08f8eebed2abb5c#%E9%9D%9E%E6%8E%A8%E5%A5%A8-%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A8%E3%81%AE%E5%85%B1%E5%AD%98)」、PowerVS IBM i のパブリック・ネットワークを有効にするのは、危険だという事を説明しました。

では、Direct Link のようなプライベート接続が準備できていない時に、インターネット経由で 5250 接続するのはどうしたらいいのでしょう。

今回、紹介するのは、**VPC 上の Linux の sshd サーバーと ssh トンネル**をはり、そこから TGW 経由で IBM i に転送してもらうという方法です。

VPC上のLinuxとの接続には、下記のパターンが考えられます。

* VPN for VPC の Client to Site VPN で接続する
* VPC Linux にフローティング IP を割り当て、そちら経由でアクセスする

今回はフローティング IP 経由での接続を検証します。

# IBM i 側の準備

## システム値の変更

PowerVS IBM i 日記(52)の「[外部からのアクセス](https://qiita.com/6onoda/items/f220dd9c11aa406f5abf#%E5%A4%96%E9%83%A8%E3%81%8B%E3%82%89%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)」で、紹介したように、5250 デバイスが自動構成できる様に設定を変更します。
関連システム値を変更するには、記事の通り事前に DST か SST から許可を与える必要があります。

##  IBM i 上でのサーバー起動

### IBM i 上の sshd は起動不要

PowerVS IBM i のパブリック・ネットワークを使って ssh トンネルをはっていた時は、IBM i 上の sshd に接続していました。
しかし、今回は VPC 上の Linux と ssh トンネルをはるため、IBM i 上では sshd を起動する必要はありません。

### PCOMM では TELNET サーバーだけ

PCOMM の場合は、TELNET サーバーだけ開始していれば構いません。

### ACS 接続で必要なホスト・サーバー

以前にも[記事](https://qiita.com/6onoda/items/d9877aa5782f37a0be09#%E7%B5%90%E5%B1%80-putty-%E3%81%A7-ssh-%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB)にしましたが、ACS で 5250 接続するのに最低限必要なポートは下記のとおりです。

こちらを起動しておきます。

| 機能 | サーバー名 | ポート(非TLS) |
|:-:|:-:|:-:|
| Server Mapper      | as-svrmap  | 449  |
| License Management | as-central | 8470 |
| Remote Command     | as-rmtcmd  | 8475 |
| Signon Verification| as-signon  | 8476 |

ODBC やデータ転送などが必要であれば「[TCP/IP Ports Required for IBM i Access and Related Functions](https://www.ibm.com/support/pages/tcpip-ports-required-ibm-i-access-and-related-functions)」を参考に必要なサーバーも起動します。


# ssh トンネルの開始

今回は Window 11 の標準の ssh コマンドを使います。
「[PowerVS IBM i 日記(3): IBM Cloud の IBM Power Systems Virtual Server で IBM i を構築する(3)－ACSからの5250接続](https://qiita.com/6onoda/items/d9877aa5782f37a0be09)」の時には、Windows 標準の ssh のバージョンが低く特権ポートを転送できなかったのですが、今回利用した Windows 11(23H2) に含まれているものには、その制約は無くなっていました。

## PCOMM 用の ssh トンネル

慣例に従って localhost の ポート 50000 で IBM i に接続する設定です。

```
ssh -L 50000:[IBM i IP]:23 root@[フローテングIP] -i ssh秘密鍵
```

PowerVS IBM i のパブリック・ネットワークを使って ssh トンネルをはっていた時は「IBM i IP」の部分が「localhost」でした。これは、IBM i 上の sshd を使っていたため、そこから見ての「localhost」に接続するという指定でした。
今回は VPC Linux の sshd から転送してもらうので IBM i の IP を指定します。

PCOMM から接続先として localhost:50000 を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/a7968ede-1167-d5ba-19ce-c11c23bd195c.png)

サインオン画面が出ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/c079eb30-366a-731c-b916-dddac8a46570.png)

## ACS 用の ssh トンネル

ACS の 5250 接続では ポート 23 に加え 4 つの転送も指定します。下記で「^」は Windows のコマンドプロンプトでの継続行表示です。Mac や Linux の場合は置き換えてください。

```
ssh -L 50000:[IBM i IP]:23 ^
    -L 449:[IBM i IP]:449 ^
    -L 8470:[IBM i IP]:8470 ^
    -L 8475:[IBM i IP]:8475 ^
    -L 8476:[IBM i IP]:8476 ^
root@[フローテングIP] -i ssh秘密鍵
```

ACS の 5250 で接続先として localhost:50000 を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/28ca5f78-0bfc-fef6-280a-52fe331b6c6a.png)

サインオンのポップアップが表示されたあとに、サインオン画面が出ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/5300d3f6-e55d-13f6-9b77-ac40537a9aab.png)

# VPC Linux の保護

現時点では、鍵認証の ssh ではあるものの、全世界からアクセスが可能です。
VPC 側の機能で接続制限をしてみましょう。

今回 VPC を作成する時にデフォルト・セキュリティ・グループで ssh を許可しました。
そのため、全世界、全てのソースからのポート22への接続が許可されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/d69c0322-c1de-5f44-4072-9c9a2eaa3e1a.png)

これを、自分が使っているグローバル IP だけを許可するように変更します。
自分が使っているグローバル IP を調べるサイトはインターネット上にいろいろあるので、そのようなものを利用すればいいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/8c9824e6-6e37-9979-a603-22fea5de4d0f.png)

これで、自分の IP からしかアクセスできなくなりました。
さらに、アクセスしない時はフローティング IP を VSI からデタッチしておけば、さらに安心でしょう。

利用する時は、このような手順になります。

1. 自分のグローバル IP アドレスを調べる
1. グローバルIPアドレスが変更されている場合は、セキュリティ・グループを更新する
1. フローティング IP を VSI にアタッチする
1. 利用する
1. フローティング IP を VSI からデタッチする

また、複数人で同じ VPC Linux を踏み台にしていて、フローティングIPをVSIからデタッチしたくない場合は

1. 自分のグローバル IP アドレスを調べる
1. セキュリティ・グループで対象グローバル IP アドレスに許可をあたえる
1. 利用する
1. セキュリティ・グループから自分の IP アドレスを除去する

---
当日記のIndexは[こちら](https://qiita.com/6onoda/items/f146c78c0c1bbe905a42)です。

---
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。