Synology NASでSSLH OpenVPN + nginx + SSH

4 min
3ssl

この記事はこちらを参考にしています。

複数のサービスを443番ポートで

環境によってSSHの22番ポートや、OpenVPNのポートの1194番ポートが使えない場合は443番ポートを使うことがあります。

HTTP(80)、HTTPS(443)以外ダメ!ということで許可されないときでも、443番ポートにすれば通信できるケースが多いためです。

しかし、OpenVPNサーバーをHTTPSポートである443を使おうとするとWebサーバーで利用している443ポートとバッティングしてしまうので本来は両立できません

443ポートを同時に利用不可
  • HTTPS / 443
  • SSH / 443 (デフォルト22)
  • OpenVPN / 443 (デフォルト1194)

SSLHサービスを使うことで、(HTTPS、OpenVPN、SSH)を同時に利用できるようになります。あまり使う機会のないものだと思いますが、いざというときに役に立つかもしれません。セキュリティリスクについては各自の判断でお願いします。

今回、比較的設定のしやすいNASでSSLHを導入してみました。

この記事の実行環境は、Synology NAS DS216+Ⅱ DSM6.2 です。

Synology コミュニティパッケージを追加

NASにログイン後「パッケージセンター」を開きます。

右上の「設定」を選択して、「パッケージソース」タブを見ます。

img

「追加」を選んで

名前」:SynoCommunity
場所」:http://packages.synocommunity.com/

を入力してください。自動的に証明書も追加されます。

sslh をインストール

パッケージセンターの左下に、「コミュニティ」が追加されました。

この中から「sslh」を探してインストールしてください。

img

インストール後、「実行」で動作するか確認してください。

設定項目はありません。

nginx 設定変更

Synology NASの標準 Webサーバーのnginxの設定を変更します。

  • DSM.mustache
  • WWWService.mustache
  • server.mustache

の3つのファイルを編集します。

設定ファイル編集にあたっては必ずバックアップを取ってください。
また、DSMのバージョンによっては動作しない場合があります。

SSHでNASにログインしてください。

nginxのディレクトリへ移動

SSH

$ sudo -i
cd /usr/syno/share/

$ sudo -i
cd /usr/syno/share/

ディレクトリごとバックアップ

SSH

cp -a nginx org_nginx
cd /usr/syno/share/nginx

3つのファイルを編集

listen 443 を
listen 127.0.0.1:443 に変更します。

SSH

vim DSM.mustache
77行目

listen 443 ssl{{#spdy}} http2{{/spdy}}{{#reuseport}} reusepo

listen 127.0.0.1:443 ssl{{#spdy}} http2{{/spdy}}{{#reuseport}} reusepo

SSH

vim WWWService.mustache
15行目

listen 443 default_server ssl{{#reuseport}} reuseport{{/reus

listen 127.0.0.1:443 default_server ssl{{#reuseport}} reuseport{{/reus

SSH

vim server.mustache
117行目

listen 443 ssl{{#https.http2}} http2{{/https.http2}}{{#reuse

listen 127.0.0.1:443 ssl{{#https.http2}} http2{{/https.http2}}{{#reuse

それぞれのファイルを保存した後にnginxを再起動します。

SSH

$ sudo synoservicecfg --restart nginx

OpenVPN設定

VPN Server」を開きます。まだインストールしていない場合は、パッケージセンターからインストールします。

左のメニューから「OpenVPN」を選び設定を行います。

img

「OpenVPNサーバーを有効にする」にチェックをして

「ポート」を 1194 に設定してください。443ではありません

その他の設定は任意の値を選んで下さい。

右下の「適用」ボタンを押して設定完了です。

あとは「特権」でVPNを利用するユーザーにチェックするのを忘れないでください。

「.ovpn」ファイルの編集

OpenVPNの設定中の「エクスポート設定」を押すと、「openvpn.zip」というクライアントから接続するための設定ファイルがダウンロードされます。

img

このzipファイルを展開して、中のファイルを編集します。

VPNConfig.ovpn」ファイルをエディタで開きます。

設定するのは一箇所だけです。

4行目

remote YOURSERVERIP 1194

を以下のように変更してください。

remote xxx.synology.me 443

img
  1. 「YOURSERVERIP」を自分のドメイン名かIPアドレス
  2. 「1194」を 443

に変更してください。

その後、保存してファイル名を分かりやすい接続名などにリネームします。
(VPNConfigのままでもOK)

全てのトラフィックをVPN経由で接続する場合は
#redirect-gateway def1

redirect-gateway def1
にします。(アンコメント)

SSLH 設定ファイルを編集

sslhのディレクトリに移動

SSH

cd /usr/local/sslh/var/

同様に設定ファイルをバックアップしてください。

SSH

cp sslh.cfg org_sslh.cfg
vim /usr/local/sslh/var/sslh.cfg
img
13行目

{ host: “0.0.0.0“; port: “30000“; }

これを

「0.0.0.0」をNASのローカルIPアドレス

「port」を 443

に変更します。以下のようにしてください。

{ host: “192.168.100.20“; port: “443“; }

設定後保存してsslhを再起動します。

SSH

$ sudo synoservicecfg --restart pkgctl-sslh

パッケージセンターの「sslh」から停止、実行をしてもOKです。

なにか問題がある場合は、実行ができません。

443ポート確認

以下のコマンドで443ポートがListenしているかを確認してください。

SSH

$ 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

img
img

iPhone

Portが 443になっています。
このように接続できればOKです。

同時に、Webサーバー (Apache)でSSL接続ができるか
SSH (DSMで22番ポート) に設定して、443番ポートで接続できるか

設定が適切であれば、接続できると思います。

メモ:

OpenVPN設定ファイル

SSH

/volume1/@appstore/VPNCenter/etc/openvpn/server.conf
関連記事

コメントを残す

メールアドレスが公開されることはありません。