この記事はこちらを参考にしています。
複数のサービスを443番ポートで
環境によってSSHの22番ポートや、OpenVPNのポートの1194番ポートが使えない場合は443番ポートを使うことがあります。
HTTP(80)、HTTPS(443)以外ダメ!ということで許可されないときでも、443番ポートにすれば通信できるケースが多いためです。
しかし、OpenVPNサーバーをHTTPSポートである443を使おうとするとWebサーバーで利用している443ポートとバッティングしてしまうので本来は両立できません。
- HTTPS / 443
- SSH / 443 (デフォルト22)
- OpenVPN / 443 (デフォルト1194)
SSLHサービスを使うことで、(HTTPS、OpenVPN、SSH)を同時に利用できるようになります。あまり使う機会のないものだと思いますが、いざというときに役に立つかもしれません。セキュリティリスクについては各自の判断でお願いします。
今回、比較的設定のしやすいNASでSSLHを導入してみました。

Synology コミュニティパッケージを追加
NASにログイン後「パッケージセンター」を開きます。
右上の「設定」を選択して、「パッケージソース」タブを見ます。

「追加」を選んで
「名前」:SynoCommunity
「場所」:http://packages.synocommunity.com/
を入力してください。自動的に証明書も追加されます。
sslh をインストール
パッケージセンターの左下に、「コミュニティ」が追加されました。
この中から「sslh」を探してインストールしてください。

インストール後、「実行」で動作するか確認してください。
設定項目はありません。
nginx 設定変更
Synology NASの標準 Webサーバーのnginxの設定を変更します。
- DSM.mustache
- WWWService.mustache
- server.mustache
の3つのファイルを編集します。
設定ファイル編集にあたっては必ずバックアップを取ってください。
また、DSMのバージョンによっては動作しない場合があります。
SSHでNASにログインしてください。
nginxのディレクトリへ移動
$ sudo -i
cd /usr/syno/share/
$ sudo -i
cd /usr/syno/share/
ディレクトリごとバックアップ
cp -a nginx org_nginx
cd /usr/syno/share/nginx
3つのファイルを編集
listen 443 を
listen 127.0.0.1:443 に変更します。
vim DSM.mustache
listen 443 ssl{{#spdy}} http2{{/spdy}}{{#reuseport}} reusepo
listen 127.0.0.1:443 ssl{{#spdy}} http2{{/spdy}}{{#reuseport}} reusepo
vim WWWService.mustache
listen 443 default_server ssl{{#reuseport}} reuseport{{/reus
listen 127.0.0.1:443 default_server ssl{{#reuseport}} reuseport{{/reus
vim server.mustache
listen 443 ssl{{#https.http2}} http2{{/https.http2}}{{#reuse
listen 127.0.0.1:443 ssl{{#https.http2}} http2{{/https.http2}}{{#reuse
それぞれのファイルを保存した後にnginxを再起動します。
$ sudo synoservicecfg --restart nginx
OpenVPN設定
「VPN Server」を開きます。まだインストールしていない場合は、パッケージセンターからインストールします。
左のメニューから「OpenVPN」を選び設定を行います。

「OpenVPNサーバーを有効にする」にチェックをして
「ポート」を 1194 に設定してください。443ではありません。
その他の設定は任意の値を選んで下さい。
右下の「適用」ボタンを押して設定完了です。
あとは「特権」でVPNを利用するユーザーにチェックするのを忘れないでください。
「.ovpn」ファイルの編集
OpenVPNの設定中の「エクスポート設定」を押すと、「openvpn.zip」というクライアントから接続するための設定ファイルがダウンロードされます。

このzipファイルを展開して、中のファイルを編集します。
「VPNConfig.ovpn」ファイルをエディタで開きます。
設定するのは一箇所だけです。
remote YOURSERVERIP 1194
を以下のように変更してください。
remote xxx.synology.me 443

- 「YOURSERVERIP」を自分のドメイン名かIPアドレス
- 「1194」を 443
に変更してください。
その後、保存してファイル名を分かりやすい接続名などにリネームします。
(VPNConfigのままでもOK)
SSLH 設定ファイルを編集
sslhのディレクトリに移動
cd /usr/local/sslh/var/
同様に設定ファイルをバックアップしてください。
cp sslh.cfg org_sslh.cfg
vim /usr/local/sslh/var/sslh.cfg

{ host: “0.0.0.0“; port: “30000“; }
これを
「0.0.0.0」をNASのローカルIPアドレス
「port」を 443
に変更します。以下のようにしてください。
{ host: “192.168.100.20“; port: “443“; }
設定後保存してsslhを再起動します。
$ sudo synoservicecfg --restart pkgctl-sslh
パッケージセンターの「sslh」から停止、実行をしてもOKです。
なにか問題がある場合は、実行ができません。
443ポート確認
以下のコマンドで443ポートがListenしているかを確認してください。
$ netstat -an | grep 443
tcp 0 0 192.168.100.20:443 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:443 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
このようになっていればOKだと思います。
クライアント機器でOpenVPN接続
最後にクライアント機器から接続してみます。
OpenVPNのインストールなどは割愛しますので各自インストールしてください。
参考:OpenVPN プロトコルを用いた VPN Gate への接続方法
インストール後、先ほど「VPNConfig.ovpn (名前は任意)」をOpenVPNクライアントソフトにインポートします。
スマホ (iPhone、Android)にはメールやLINEなどで添付して送るといいと思います。
Mac


iPhone

Portが 443になっています。
このように接続できればOKです。
同時に、Webサーバー (Apache)でSSL接続ができるか
SSH (DSMで22番ポート) に設定して、443番ポートで接続できるか
設定が適切であれば、接続できると思います。

メモ:
OpenVPN設定ファイル
/volume1/@appstore/VPNCenter/etc/openvpn/server.conf