RPiで簡易コンソールサーバー構築

# 0.はじめに

どうやってもルーターの管理ポートの設定が上手くいかない。そんな時、コンソールサーバーが欲しくなります。ですが、コンソールサーバーの予算なんてもちろんない。
ということで手元にあったRPi3Bを使って、簡易コンソールサーバーを構築していく。

※今回の構築はあくまで簡易的なものなので、常時稼働するものを作る場合はconserver等の使用を推奨する。

# 1. 構築環境
### 使用機材
 - Raspberry Pi 3 Model B Rev 1.2
 - USB-RJ45シリアルケーブル　×2
 - RPi電源ケーブル
 - microSDカード 16gb
あったほうがいいもの
 - LANケーブル延長コネクタ
 - USBハブ

シリアルで操作するネットワーク機器: Juniper SRX 1500 ×2

# 2. 設計
```
             eth  ttyUSB*      con
PC ------------ PiCS ============ Juniper
  -----Telnet----->    ---Console--->
```

簡易コンソールサーバーなので、SSHという上質な物は使わない。


# 3. 構築
SDにubuntuを書き込んでおく。
server版でもdesktop版でも構わない。

#### RPi を更新して、SSH、telnet、ser2netをインストールする
```bash
sudo apt update
sudo apt upgrade -y
sudo apt install openssh-server
sudo apt install telnetd
sudo apt install vim 
sudo apt install ser2net 
```
#### シリアルポートの把握
```bash
sudo dmesg | grep tty
```
![スクリーンショット 2023-12-19 9.46.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640766/b3d0c179-01b8-3e25-876f-5d59ef2e3af0.png)
ttyUSB0とttyUSB1の二つが接続されていることがわかる。


#### /etc/ser2net.yamlを編集
![スクリーンショット 2023-12-19 9.53.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640766/e6b7df08-f4cf-39e1-9313-b7fbca1a745d.png)


```yaml:ser2net.yaml
connection: &con<任意>
    accepter: telnet,<RPiのIPアドレス>,<TCPのポート>
    enable: on
    options:
      banner: *banner
      kickolduser: true
      telnet-brk-on-sync: true
    connector: serialdev,
              /dev/ttyUSB<確認したUSB番号>,
              転送速度n81,local
```
TCPのポートは使用されているポートに当たらなければ、任意で設定可能。
転送速度は今回は9600 bpsに設定。
リスタートする。
```bash
sudo systemctl restart ser2net
```

#### TCPのポートがリッスンしているか確認
```bash 
$ ss -atn
State           Recv-Q             Send-Q                        Local Address:Port                             Peer Address:Port                         Process
LISTEN           0                      5                                10.254.0.180:3005                                     0.0.0.0:*
LISTEN           0                      4096                          127.0.0.53%lo:53                                        0.0.0.0:*
LISTEN           0                      128                            0.0.0.0:22                                                    0.0.0.0:*
LISTEN           0                      128                            127.0.0.1:631                                              0.0.0.0:*
LISTEN           0                      128                             0.0.0.0:23                                                   0.0.0.0:*
LISTEN           0                       5                               10.254.0.180:3004                                      0.0.0.0:*
ESTAB            0                       0                               10.254.0.180:22                                     10.254.254.28:60882
ESTAB            0                       0                               10.254.0.180:3004                                  10.254.254.28:63465
ESTAB            0                       52                              10.254.0.180:22                                     10.254.254.28:62805
LISTEN           0                       5                                    *:2000                                                             *:*
LISTEN           0                       5                                     *:2001                                                             *:*
LISTEN           0                       128                                  [::]:22                                                            [::]:*
LISTEN           0                       128                                  [::1]:631                                                           [::]:*
LISTEN           0                        5                                    *:3000                                                             *:*
LISTEN           0                        5                                    *:3001                                                             *:*

```

# 4. 動作確認
PCから、telnetでポートを指定して、接続する。
```bash
$telnet 10.254.0.180 3005
Trying 10.254.0.180...
Connected to 10.254.0.180.
Escape character is '^]'.

ser2net port telnet,10.254.0.180,3005 device serialdev, /dev/ttyUSB0, 9600n81,local [] (Debian GNU/Linux)


FreeBSD/amd64 (Amnesiac) (ttyu0)

login:

```

# 5.問題点
- セキュリティ
telnet接続のため、SSHと違い暗号化されていない点。
また、本来Console serverへのログインの際、パスワード等を求められるが、要求されない点。

- ログ取り
変更履歴を残す確認できるようにlogを取るべきだが、調べた限り、自動でログ取りする機構をser2netは備えていない


→→ser2netでのコンソールサーバー構築はあくまで簡易的なものなので、常時稼働するものを作るならconserverの使用を推奨する。


# 参考URL
 - 機器の構成を参考

https://qiita.com/nuruposan/items/118894a3f0e730d3e200

 - ser2netの導入方法

https://www.jpaul.me/2019/01/how-to-build-a-raspberry-pi-serial-console-server-with-ser2net/

 - ser2netの設定方法

https://wifizoo.org/2023/05/12/yet-another-ser2net-tutorial/