RTX1210でssh接続の設定を行う[LAN内、外部から]

## 概要
YAMAHA RTX1210ルーターを使ってみて色々試行錯誤したことをまとめていきたいと思います。まずは、**同一LAN内からルーターへssh接続しコマンドラインでの設定を可能にする**まで。デフォルトでは、rtx1210でsshは使うことはできず、telnetでの接続のみになっています。telnetとsshとの違いは、通信内容が暗号化されているかどうかにあり、暗号化されているsshの方がよりセキュアであると言えます。そのあとは、**ポートフォワーディングの設定をして外部のグローバルIPからルーターへsshをする**ところまでまとめます。次に、同じく**ポートフォワーディングの設定をして外部のグローバルIPからwebGUIにアクセスする**ところまでまとめます。最後に、ルーターの下にwebサーバーを設置し、**webサーバーに対しても外部からsshできるようにポートフォワーディングの設定**をします。


ポートフォワーディングに関しては、下図参照。
慣れてしまえば簡単ですが、一回きちんと設定できるまでは結構大変でした。

![Untitled Diagram (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/f97b484a-4d55-efdc-2b40-317d11898197.png)



### 動作環境
RTX1210 ファームウェアリビジョン Rev.14.01.35
macOS Mojave 10.14.6

※ まずは、プロバイダとの接続を完了させて、`管理`→`保守`→`ファームウェアの更新`より最新のファームウェアにアップデートしてください。

### 前提
LAN1でRTX1210とPCを有線接続し、ブラウザで`192.168.100.1`にアクセスします。

表示されたweb GUIで**ユーザーの登録**及び**管理者パスワード**の登録を行います。

<img width="1211" alt="スクリーンショット 2020-04-05 13.51.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/1593caf3-fa29-44a1-c287-9e883881871b.png">

ユーザーの設定を行うときには、sshでの接続を許可するようにしてください。
ここで設定したユーザー名とそのパスワードは、terminalで操作するときに必要になります。

また、ssh用の鍵を生成するときには、管理者パスワードが必要なので合わせて覚えておきます。

## telnetで接続する
LAN2で、PPPoE接続またはDHCP接続などでインターネットと接続します(詳しい手順は割愛)。
terminalを開き、ルーターのIPアドレスに対してtelnetで接続します。

```sh
telnet 192.168.100.1 
```

先ほど設定したユーザー名とパスワードでログインします。

その後、管理者権限にグレードアップして、sshの設定を行います。


```sh
administrator
sshd host key generate
sshd service on
```
一般ユーザーだと↑この操作ができないので、管理者パスワードでadminになることが必要です。
[管理者になれない場合](#管理者になれない)
<img width="700" alt="スクリーンショット 2020-04-05 14.17.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/d9901998-606f-4c4e-ac1b-13bc430f7d7b.png">

### ssh接続の確認
同一LAN内からssh接続を行います。

```sh
ssh {username}@192.168.100.1
```

<img width="707" alt="スクリーンショット 2020-04-05 14.17.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/fb895d6e-cf53-f38a-765e-f2c3af1a6285.png">

無事ssh接続までできました。

## 外部からルーターにsshをする

### natの設定
web GUIでの設定
`詳細設定`→`NAT`→`NATディスクリプター番号の一覧`→`設定`

<img width="970" alt="スクリーンショット 2020-04-07 1.38.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/52035905-90e2-2a21-bbcf-cb0371134d04.png">

ルーターにアクセスするときにRTX1210の仕様上直接22番ポートにアクセスすることはできません。したがって、他のport(ここでは33333を想定)を経由する形で、ルーターの22番ポートにsshアクセスします。

<img width="936" alt="スクリーンショット 2020-04-07 1.36.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/0ab32192-6559-6478-885a-353dfac2e80b.png">

configファイルの設定

```sh:natの設定
nat descriptor masquerade static 200 1 192.168.100.1 tcp 33333=22
```

さらに、ここでconfigファイルのnatの部分が有効になっているか必ず確認しましょう。

```sh:natの設定
ip lan2 nat descriptor 200
```

### ipフィルタの設定
web GUIでの設定
`詳細設定`→`セキュリティ`→`IPフィルター`→`LAN2 設定`

<img width="914" alt="スクリーンショット 2020-04-07 1.49.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/387dd579-2845-a219-5626-d8d2433f2017.png">

configファイルの設定
すべてのIPアドレスからのアクセスを許容する設定です。もし、アクセスできるIPを固定したい場合は、最初のアスタリスクの部分にIPを入れます。

```sh:natの設定
ip filter 101100 pass-log * 192.168.100.1 tcp * 22
```

ipフィルターの設定が反映されているのかも確認しましょう。この時の`...`の順番が、優先順位と一致します。

```sh:natの設定
ip lan2 secure filter in ... 101100
```

ここまで設定できたら外部IPアドレスからsshしてみます。

```sh
ssh {username}@{ルーターのグローバルIP} -p 33333
```
ポート33333を経由して、ssh接続が可能になっていると思います。

## 外部からweb GUIにアクセスする
RTX1210の仕様上直接80番ポートにアクセスすることはできません。したがって、他のport(ここでは44444を想定)を経由する形で、ルーターの80番ポート(rtx1210ではwwwと表現される)にアクセスします。基本的には、上記の手順と同じですので、configファイルの設定のみ載せておきます。

```sh:
# natの設定
nat descriptor masquerade static 200 2 192.168.100.1 tcp 44444=www
# ipフィルターの設定
ip filter 101102 pass-log * 192.168.100.1 tcp * www
```
### httpアクセスするための設定
全てのIPアドレスからのhttpアクセスを許容します。

```sh:httpアクセス設定
httpd host any
```
参考：[HTTP サーバーへアクセスできるホストの設定](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/http_server/httpd_host.html)

ブラウザから、`ルーターのグローバルIP:44444`にアクセスすると、web GUIにログインできると思います。

## 外部からLAN内のwebサーバーにsshする
### webサーバーのローカルIPを固定する
まずは、ローカルIP`192.168.100.2`にwebサーバー固定します。
固定する際には、webサーバーの`mac address`を調べて次のように直接configファイルに書き込みます。

```sh
dhcp scope bind 2 192.168.100.2 ethernet 4c:52:62:43:56:97
```

なお、macアドレス以外がクライエントIDになっている場合もありますので、そのときは、ルーターにsshをして`show dhcp status`などで確認することが必要です。

参考：https://www.yokoweb.net/2017/07/02/rtx1210-dhcp-server-mac/

### webサーバーへのssh接続のためのポートフォワーディング
あるport(ここでは55555を想定)を経由する形で、webサーバーの22番ポートにアクセスします。これも同様に、natとipフィルターを設定すれば大丈夫ですので、configの設定のみ載せておきます。

```sh
# natの設定
nat descriptor masquerade static 200 3 192.168.100.2 tcp 55555=22
# ipフィルターの設定
ip filter 101101 pass * 192.168.100.2 tcp * 55555
```

ここまで設定できたら外部IPアドレスからwebサーバーにsshしてみます。

```sh
ssh {username}@{ルーターのグローバルIP} -p 55555
```
ポート55555を経由して、ssh接続が可能になっていると思います。

## トラブルシューティング
### terminalで文字化けしてしまう
```
> console character ?
    ͌`F console character R[h
               R[h = 'en.ascii', 'ja.sjis', 'ja.euc' or 'ja.utf8'
@    @F o͕R[hI܂
ftHglF ja.sjis
> console character ja.utf8
> console character ?
    入力形式： console character 文字コード
               文字コード = 'en.ascii', 'ja.sjis', 'ja.euc' or 'ja.utf8'
　    　説明： 出力文字コードを選択します
デフォルト値： ja.sjis
> console character
```

参考：[表示する文字セットについて](http://www.rtpro.yamaha.co.jp/RT/docs/console/charactor-set.html)

### 管理者になれない
上記のように文字化けした状態だと、passwordの入力がうまくいってない場合があります。
まずは、文字化けを直して再挑戦してみてください。

### configファイルをimportしたらログインできなくなった
間違ったconfigファイルをimportして再起動したら、ログインできなくなるので注意が必要です。例えば、`show config`コマンドで表示された中身では、パスワードは`*`で表示されますが、web GUIからexportしたconfigファイルの場合、`encrypted vmaeobk2094j2gvnav439u2Fv`のようになります。したがって、上記のエラーの原因は、生のconfigファイル(encrypted ...のファイル)をimportしなかった場合に発生します。こうなると仕方がないので、初期化して再設定するしかありません。初期化は、前面の3つもボタンを長押ししながら、電源をOnにすると可能です。

## YAMAHAルーター設定のコツ
web GUIは便利ですが、設定が反映されていないといったことが多々起きます。したがって、configファイルの中身を毎回きちんと読み、反映されているのか確認しながら作業することが大切になってきます。`管理`の部分からconfigファイルをimportしたりexportしたりできるので、毎回確認しながら設定しましょう。