OpenBlocks を使い、遠隔地のインターネット公開されていない内部ドメインのWebサーバを、SSL-VPN装置を使わずに 安全に利用するには（OpenBlocks を、簡易VPN機器っぽく使う）

## 内部ドメインの Webサーバを、遠隔地から安全に利用する為の前提条件
- 遠隔地に設置する想定の OpenBlocks 上の ssh を使って、目的のWebサーバと同一ネットワークの踏台サーバ、または Webサーバ自身に接続できること。
- OpenBlocks にて、Dnsmasq が動いていること。

この手順のメリットは、追加ソフトウェアをインストールすることなく、素の OpenBlocks だけで 比較的安全・容易に Webサーバを遠隔利用できるということです。

完全な VPN のように 全ての TCPポートやプロトコルを使えるわけではありませんが、逆に言うと、OpenBlocks側のネットワーク セキュリティリスクを 全体が被る必要が無くなるので、ある意味で、VPN よりも安全性が高いと考えることも出来ます。
![ob_skurioka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273671/98c0fbbb-9e2b-5c55-d0af-5a014145fa5c.jpeg)
## 1. OpenBlocks に対して ssh で rootログインし、キーペアを作成する
OpenBlocks の root で、ssh-keygen を使い、パスフレーズなしの キーペアを作成する。

```sh
root@ob_skurioka:~# ls -la .ssh/
total 20
drwx------ 2 root root 4096 Mar  8 16:03 .
drwx------ 4 root root 4096 Mar  8 21:10 ..
-rw------- 1 root root 1679 Mar  8 16:03 id_rsa
-rw-r--r-- 1 root root  414 Mar  8 16:03 id_rsa.pub
root@ob_skurioka:~#
```
## 2. Webサーバと同一ネットワークの ログイン先のサーバ(踏台サーバ)にて、作成した公開キーを追加する。

```sh
[user@Server ~]$ vim .ssh/authorized_keys
```
## 3. OpenBlocks に対して ssh で rootログインし、ポートフォワード用のスクリプトを作成する。

```bash:/root/auto_session_wrap.sh
#!/bin/sh
ulimit -n 1006500   # ssh のバグ?により、ファイルディスクリプタを 食い尽くすバージョンがある為、念の為の暫定処置
while(true) do
        if [ `ps ax | grep auto_session_to_xx.sh | grep -v grep | wc -l` = "0" ]; then
                /root/auto_session_to_xx.sh &   # 任意のファイル名に変更する
        fi
        sleep 10
done
```
/root/auto_session_to_xx.sh は、任意のファイル名に変更する。
２ファイルとも、chmod で 実行権限を付けておく。

```bash:/root/auto_session_to_xx.sh
#!/bin/sh
sleep 10
ssh -t -t -o 'ExitOnForwardFailure=yes' -o 'ServerAliveInterval=10' -o 'ConnectTimeout=10' -L 192.168.0.xxx:80:192.168.yyy.zzz:80 -R ttttt:192.168.0.xxx:880 -R sssss:localhost:22 user@aaa.bbb.ccc.ddd
exit $?
```
| 指定するパラメータ | 説明                                                     |
|:----------------|---------------------------------------------------------|
| 192.168.0.xxx   | OpenBlocks 自身のプライベートIP                            |
| 192.168.yyy.zzz | 公開したい Webサーバの 内部IPアドレス                        |
| ttttt           | 踏台サーバから OpenBlocks の管理画面(WEB UI)を開くときのポート |
| sssss           | 踏台サーバから OpenBlocks に sshログインするときのポート       |
| aaa.bbb.ccc.ddd | OpenBlocks から見た、踏台サーバのグローバルIP                 |
| user            | 踏台サーバ上の ログインアカウント                             |

## 4. auto_session_to_xx.sh を実行し、OpenBlocks から 踏台サーバへ 自動sshログインできることを 確認したあと、ssh の接続オプションを変更する。
```sh
root@ob_skurioka:~# ./auto_session_to_xx.sh
Last login: Sat Mar 14 20:10:23 2020 from xxx.xxx.xxx.xxx
[user@Server ~]$
```
確認後、以下のように オプション変更。
```bash:/root/auto_session_to_xx.sh
～
ssh -t -t ～
～
```
　↓
```bash:/root/auto_session_to_xx.sh
～
ssh -N ～
～
```
「-t -t」を「-N」に変更しておく。
## 5. OpenBlocks の管理画面(WEB UI)にログインし、[拡張]=>[スクリプト編集]より、起動スクリプトを編集する。
```sh
echo "192.168.0.xxx   hoge.fuga.jp" >>/etc/hosts
/etc/init.d/dnsmasq restart
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.xxx -p tcp --dport 80 -j ACCEPT
nohup /root/auto_session_wrap.sh &
```
| 指定するパラメータ | 説明                                           |
|:----------------|-----------------------------------------------|
| 192.168.0.xxx   | OpenBlocks 自身のプライベートIP                  |
| hoge.fuga.jp    | 公開したい Webサーバの 内部FQDN                   |
| 192.168.0.0/16  | OpenBlocks でサービス提供したい、内部IPアドレス帯   |
---
OpenBlocks を再起動することにより、OpenBlocks の内側にいる 全てのPC に対して、Webサーバのサービス提供をし、遠隔地から安全に利用できます。

概要は わかったと思いますが、Dnsmasq を使うことで、OpenBlocks を 内部FQDN として振る舞わせています。
単純に sshポートフォワードで、自分自身に向けた http(80番)を転送しているだけです。