NASキット Synology DiskStation DS220jで遊ぶ その11: リモートからSFTPでアクセスする

NASキット Synology DiskStation DS220jで遊ぶ その11: リモートからSFTPでアクセスする ネットワーク
スポンサーリンク

前回はDiskStation DS220jにメディアサーバーをインストールしました。

今回はこのDiskStation DS220jにリモートからアクセスする方法を考えます。

スポンサーリンク

利用可能なリモートアクセス方法

SynologyのDiskStationでは複数のリモートアクセスする方法が用意されています。

最もシンプルなのがSynology QuickConnectです。

QuickConnect | DSM - Synology ナレッジセンター
Synologyナレッジセンターは、総合的なサポートをお届けするもので、よくある質問に対する回答の提供、トラブルシューティング手順、ソフトウェア チュートリアル、そして必要になるすべての技術文書が提供されます。

QuickConnectを利用するとポート転送などの設定を行うことなく、リモートから自宅にあるDiskStationにアクセスすることができます。

もう一つの方法がDiskStationをVPNサーバとして設定し、VPNで接続する方法です。

Synology NASをVPNサーバーとして設定するには? - Synology ナレッジセンター
Synologyナレッジセンターは、総合的なサポートをお届けするもので、よくある質問に対する回答の提供、トラブルシューティング手順、ソフトウェア チュートリアル、そして必要になるすべての技術文書が提供されます。

VPNサーバは「PPTP」「L2TP/IPSec」「OpenVPN」をサポートしています。ただPPTPは既に古いので実質は「L2TP/IPSec」「OpenVPN」のいずれかを使うことになります。

リモートアクセスで心配なのが不正利用です。アカウント名やパスワード、事前共有キーによる認証だと流出した場合にリスクがありますし、総当たり攻撃のリスクがあります。

このため可能であれば公開鍵認証によって認証を行いたいものです。

上記のリモートアクセス方法の中で公開鍵認証をサポートしているのはOpenVPNです。

L2TP/IPSecでも公開鍵認証ができるのかもしれませんが、DiskStationのVPNサーバーではサポートしていないようです。

OpenVPNを利用しても良いのですが、設定がなかなか面倒なのと、紹介しているサイトが多そうなので、別の方法として利用を考えたのがSFTPです。

スポンサーリンク

SFTPについて

SFTPは「FTP」という名前がついていますがFTPプロトコルとは関係なく、セキュアシェルであるSSHを利用したファイル転送方式です。

SSHを利用していることからSFTPで公開鍵認証を利用することができます。

DiskStationではSSHとSFTPをサポートしていることから、設定を駆使すればリモート接続に利用できるのではないかと考えました。

手順

いろいろ調べた結果、次の手順で設定することにしました。

  1. SSHの有効化と接続の確認
  2. SSHの公開鍵認証を有効化
  3. パスワードログインの無効化
  4. SFTPの有効化と接続の確認
  5. ポート開放(ポートフォワーディング)の有効化
    1. ポート開放ができる場合
    2. ポート開放ができない場合の代替策
  6. DynamicDNSの設定

ゴールは外部(インターネット)からDiskStationにSFTPの公開鍵認証で接続することです。ただし、安全のためSSHについては外部からは接続できないようにしておきます。

SSHの有効化と接続の確認

DSMのコントロールパネルでSSHを有効にしましょう。「端末とSNMP」にSSHの設定があります。

SSHの有効化

ポート番号はデフォルトのままにしておきます。

SSHを有効にしようとすると次のようなメッセージが出ますが、OKを選択しておきます。

SSHを有効にする際の注意

また後述する公開鍵認証のためにホームディレクトリが必要になるので、DSMのコントロールパネルの「ユーザーとグループ」で「詳細」を選び、「ユーザーホームサービスを有効にする」を選択しておきます。

ユーザホームサービスの有効化

次にSSHの接続を確認してみます。Windows用のSSHクライアントとしてはPuTTY(日本語化版)を利用します。

PuTTYrv (PuTTY-ranvis) - Ranvis software

PuTTYの接続先の設定ではDiskStationのIPアドレスを入力し、SSHが選択されていることを確認して「開く」を選択します。

PuTTYでの接続

初回は次のような警告が表示されるかもしれませんが、問題ないので「はい」を選択してOKです。

初回接続時の警告

DiskStationの場合は管理者アカウントのみSSH接続ができるので、管理者アカウントのユーザ名とパスワードでログインします。

SSHでのログイン

ログインに成功すると次のように表示されます。

SSHでのログイン成功

ちゃんとSSHで接続できたらこのウィンドウをそのまま開いておきます。

SSHの公開鍵認証を有効化

まず管理者アカウントのユーザで公開鍵認証をできるようにします。うまくいったら一般ユーザアカウントでも公開鍵認証の設定をします。

管理者アカウント用の秘密鍵・公開鍵ペアを作成

鍵の作成にはPuTTYに付属している「PuTTYgen (puttygen.exe)」を利用します。

PuTTYgenを実行すると次のような画面が現れます。

秘密鍵・公開鍵ペアの生成

公開鍵・秘密鍵のペアを作成する場合は、「生成」ボタンを押します。「生成」ボタンを押したらキーの生成が始まりますので、「鍵」のエリアの上でマウスを適当に動かしましょう。マウスの動きを使ってキーに必要な乱数を生成しているようです。

秘密鍵・公開鍵ペアの生成中

鍵のの生成が完了すると次のような画面になります。コメントはこのキーを利用するクライアントの名前などにしておくとよいでしょう。

生成した秘密鍵を安全な場所でのみ利用するでしたらパスフレーズは空欄のままでも構いませんが、そうでない場合は安全のため入力しておいた方がよいと思います。もちろん確認用のパスフレーズの欄にも同じパスフレーズを入力しておきます。

コメントとパスフレーズの設定が終わったら、「秘密鍵を保存」で秘密鍵をファイルに保存します。

生成した公開鍵と秘密鍵

最後に「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」をすべてコピーしておきます。

管理者ユーザアカウントに公開鍵を設定

先ほどSSHで接続したPuTTYの画面で管理者ユーザアカウントに先ほどコピーした公開鍵を登録していきます。

chmod –R 755 ~
cd ~
mkdir .ssh
cat >> .ssh/authorized_keys

これで入力待ちになりますので、PuTTYのタイトルバーを右クリックして「貼り付け」を選択します。

公開鍵の内容がペーストされたら「リターンキー」を1回入力したあとに、「Ctrlキー」を押しながら「d」を入力します。

これで公開鍵がauthorized_keysに追記できました。

最後に権限を修正します。

chmod 700 .ssh/
chmod 644 .ssh/authorized_keys

SSHの設定を変更

引き続きSSHで接続したPuTTYの画面で作業をしていきます。

次はSSHの設定ファイル「/etc/ssh/sshd_config」を編集していきます。

下記のコマンドでsshd_configファイルを修正します。

sudo vi /etc/ssh/sshd_config

このときパスワードを要求されますが、ログインした管理者ユーザアカウントのパスワードを入力してください。

そして

#PubkeyAuthentication yes

を見つけたら行頭の「#」を削除します。

同様に

#AuthorizedKeysFile .ssh/authorized_keys

の行頭の「#」を削除します。

修正が終わったら保存しておきます。

設定ファイルにエラーがないかどうかは下記のコマンドで確認できます。

sudo sshd -t

SSHの設定変更を反映

変更した設定を反映させるために次のコマンドを実行します。

sudo synosystemctl reload sshd

公開鍵認証による接続の確認

ここまでできたら管理者ユーザアカウントで公開鍵認証を試してみましょう。

PuTTYを起動したらホスト名のところにDiskStationのIPアドレスを入力します。また接続タイプがSSHになっていることを確認します。

SSHでの接続

次に左側で「接続→SSH→認証」を選び、「認証のための秘密鍵ファイル」にPuTTYgenで公開鍵・秘密鍵ペアを作成した際に保存したファイルを指定します。

秘密鍵の指定

あとは「開く」を選択すると公開鍵認証でSSHのセッションを開始します。

「login as:」と表示されたら管理者ユーザアカウント名を入力しましょう。

公開鍵認証でのログイン

次の行に「Authenticating with publick key」と表示されれば公開鍵認証になっています。

秘密鍵にパスフレーズを設定していればここでパスフレーズを入力します。パスフレーズを設定していない場合はそのままログインに成功するはずです。

これで

  • 公開鍵認証方式が有効になっていること
  • 管理者ユーザアカウントの公開鍵の設定が正しいこと

が確認できました。

一般ユーザアカウントの公開鍵認証を設定

作業内容は基本的には管理者ユーザアカウントでやったことと同じです。公開鍵・秘密鍵にペアを作成し、公開鍵をDiskStationのホームディレクトリの.ssh/authorized_keysに登録します。

ただ、公開鍵認証を設定するまでは一般ユーザアカウントではSSHで接続できないので、管理者ユーザアカウントでSSH接続して作業をする点が異なります。

まずPuTTYGenで公開鍵・秘密鍵ペアを作成し、秘密鍵をファイルの保存し、OpenSSH用の公開鍵をコピーしておきます。これは管理者ユーザアカウントでやったことと同じなので省略します。

次に管理者ユーザアカウントでSSH接続した状態でつぎのコマンドを入力していきます。sudoコマンドを使ったときにパスワードを聞かれた場合はログインしている管理者ユーザアカウントのパスワードを入力します。

sudo chmod –R 755 ~ユーザアカウント名
cd ~ユーザアカウント名
mkdir .ssh
cat >> .ssh/authorized_keys

これで入力待ちになりますので、コピーしておいた公開鍵を貼り付けて「リターンキー」を押し、さらに「Ctrlキー」を押しながら「dキー」を入力します。

これで公開鍵がauthorized_keysに追記できました。

最後に所有者と権限を修正します。

sudo chown –R ユーザアカウント名:users .ssh/
sudo chmod 700 .ssh/
sudo chmod 644 .ssh/authorized_keys

これで一般ユーザアカウント用の公開鍵の設定が完了です。

DiskStationは一般ユーザアカウントでのSSH接続は許可していないので、設定がちゃんとできているかどうかは後述のSFTPで行います。

パスワード認証の無効化

公開鍵認証で接続できることを確認したら、パスワード認証を無効にしましょう。

再び/etc/ssh/sshd_configを修正します。修正内容は下記の行を追記することです。

PasswordAuthentication no

あとは新しい設定を反映させます。

sudo synosystemctl reload sshd

パスワード認証が無効になっているかどうかは、公開鍵無しで接続してみればわかります。次のようなエラーになればパスワード認証は無効になっています。

パスワード認証に失敗

SFTPの有効化と接続の確認

DSMのコントロールパネルに戻り、「ファイルとサービス」から「SFTPサービス」を有効にします。このときポート番号をデフォルトの22以外(1000~65535の中から好きな数値を選択)します。ここでは「55522」としておきます。

SFTPの有効化

つづいて一般ユーザアカウントでSFTPの接続を確認します。こちらはWinSCPというアプリを利用します。

WinSCPとは :: WinSCP
WinSCP is a free SFTP, SCP, Amazon S3, WebDAV, and FTP client for Windows.

WinSCPを起動したら転送プロトコルとして「SFTP」を選択して、ホスト名にDiskStationのIPアドレス、ポート番号にDSMで設定したポート番号、ユーザ名に一般ユーザアカウント名を入力します。

WinSCPでSFTP接続

次に「設定」を選択し、左側で「SSH」→「認証」を選択して、秘密鍵の欄で一般ユーザアカウント用の秘密鍵ファイルを指定します。

WinSCPに秘密鍵を設定

「OK」を選択するとログインの設定画面に戻るので「ログイン」を選択しましょう。

秘密鍵にパスフレーズを設定している場合は、パスフレーズの入力を求められると思います。

これで接続できればOKです。WinSCPの右側のペインにDiskStationのストレージの内容が表示されます。

WinSCPでSFTP接続成功

ポート開放(ポートフォワーディング)の設定

ここまできたら無線LANルーター(ブロードバンドルーター)の設定を変更を変更して、外部(インターネット側)からDiskStationにアクセスできるようにします。

これを実現するためには、インターネットプロバイダの接続方式がポート開放に対応していることが前提です。

具体的には

  • 従来の接続方式(PPPoE) → ポート開放に対応している
  • V6プラス (IPoE) → ポート開放に対応しているらしい
  • transix (IPoE) → ポート開放に対応していない

となります。

ポート開放ができる場合

私のインターネット接続はtransixだったため、ポート開放に対応していませんでした。

そのためこの設定が正しいかどうかの確認までは行えませんでした。

プロバイダの接続方式がポート開放に対応している場合は、無線LANルーター(ブロードバンドルーター)の設定を変更します。これは利用している機器によって異なります。

私はバッファローのWXR-1750DHPという製品を使っていますのでその管理画面で紹介します。

Wi-Fiルーター WXR-1750DHPを導入する その1: 購入!
今回はWi-FiルーターをAterm WG600HPからAirStation WXR-1750HPに変更したことを紹介します。WXR-1750HPは予算オーバーだったのですが、モデル末期のためかAmazonで安売りをしており思いのほか安く入手することができました。コンパクトなAtermシリーズに対して筐体は大きくなりますが、私の場合は特に問題なく設置することができました。

この製品の画面でポートフォワーディングの設定を紹介していきます。

無線LANルーターの管理画面で「詳細設定」→「セキュリティー」→「ポート変換」を選択します。

ここで次のように設定していきます。

  • グループ: 「新規追加」を選択して「SFTP」を入力
  • Internet側IPアドレス: 「エアステーションのInternet側IPアドレス」を選択
  • プロトコル: 「TCP/UDP」を選択して「任意のTCP/UDPポート」に「1025~65535の間の任意の数字」を入力
  • LAN側IPアドレス: 「DiskStationのIPアドレス」を入力
  • LAN側ポート: SFTP用に設定したポート番号を入力(私の場合は「55522」)

上記の入力が完了したら「新規追加」を選択します。

ポート変換の設定追加

これでOKです。

あとは外部(家庭内LANの外)からルータのインターネット側IPアドレスに対してSFTPで接続してみましょう。

インターネット側IPアドレスがわからない場合は下記のサイトにアクセスすると「IPv4 connectivity」ところに表示されます。

https://ipv6-test.com

インターネット側のIPアドレスがわかったら家庭内LANの外のPCからWinSCPで公開鍵認証で接続してみましょう。接続先のホスト名は先ほど調べたインターネット側のIPアドレス、ポート番号は無線LANルータに設定した「任意のTCP/UDPポート」を指定します。

これで無線LANルータに届いたSFTP接続の要求が、DiskStationのSFTP用のポート番号に転送され、SFTPによる接続が確立するはずです。

ポート開放ができない場合

問題はプロバイダの都合でポート開放できない場合です。ただ、IPv6を使っているTransix方式の場合は望みがあります。

下記の記事の後半が参考になりました。

IPv6で直接NASにつなげばいいじゃん! IPoE IPv6環境では外部からNASへアクセスできない?を検証してみた【イニシャルB】
「IPoE IPv6環境では、NASやサーバーの公開はあきらめたほうがいい」。一般的にはそう説明されることが多いが、実際のところどうなのだろうか? transixのインターネット接続環境で、Synology NASへの外部からのアクセスを検証してみた。

要は「IPoEでIPv6接続ができているのならば、IPv4ではなくIPv6でポート開放をして接続してしまえば良い」ということです。

まずはDiskStationのIPv6アドレスを確認しましょう。

DSMのコントロールパネルで「ネットワーク」→「ネットワークインターフェース」を選択して「LAN」の情報を表示させるとIPv6アドレスが表示されます。

IPv6アドレスの確認

このときIPv6アドレスは2個あると思いますが、先頭が「fe80」でない方のIPv6アドレスを控えておきましょう。

つづいてIPv6のSFTP用のポートを開放します。私の無線LANルータ(WXR-1750DHP)の場合はIPv6のポート番号は変換できないので、開放するポート番号はDSMでSFTP用の割り当てたポート番号(私の場合は55522)です。

WXR-1750DHPの場合は「詳細設定」→「セキュリティー」→「IPv6フィルター」を選択し、次のように設定します。

  • 動作: 通過
  • 方向: Internet→LAN
  • IPアドレス
    • 送信元: 空欄
    • 宛先: DiskStationのIPv6アドレス
  • プロトコル: 「TCP/UDP」→「任意のTCPポート」→「55522」

上記の入力が完了したら「追加」を選択します。

IPv6フィルターの設定

あとは外部(家庭内LANの外)からDiskStationのIPv6アドレスに対してSFTPで接続してみましょう。

WinSCPの場合はIPv6に対応しているので、ホスト名のところにはDiskStationのIPv6アドレスを入力します。このときプレフィックス長(IPv6アドレスの末尾の「/数値」の部分)は入力しなくてOKです。

この方法を使うためにはWinSCPを動かすPCがIPv6でインターネットに接続している必要があります。

私の実験では楽天モバイルのSIMを使ったスマートフォンのテザリング機能をインターネットに接続したところ、IPv6で通信することができ、DiskStationに接続することができました。

DynamicDNSの設定

リモートから接続する際に、IPv4アドレスやIPv6アドレスをそのまま入力するのはかなり面倒です。またIPv4アドレスの場合は変更される可能性があるので、毎回最新のIPアドレスを確認するのは大変です。

そこでホスト名で接続できるようにDynamicDNSを設定しておきましょう。

前の節で紹介したようにポート開放ができなくて接続にIPv6を使う場合は、DynamicDNSのサービスプロバイダがIPv6に対応している必要があるので注意してください。

今回は無料で利用できIPv6に対応しているSynologyのDynamicDNSサービスを利用してみます。

ただしSynologyアカウントにサインアップしておく必要があります。

DSMで「外部アクセス」→「DDNS」で表示された画面で「追加」を選択します。

DyamicDNSの設定

これでDyamicDNSの設定をする画面になるので、サービスプロバイダーとしてSynologyを選んだら覚えやすい「ホスト名」を入力します。

SynologyのDynamicDNSサービスを利用

「外部アドレス(IPv4)」と「外部アドレス(IPv6)」はデフォルトで正しい値が入っていると思います。

通常はそのままで良いのですが、IPv4のポート開放ができずSFTP接続にIPv6を利用する場合は、I「外部アドレス(IPv4)」は空欄にすることをオススメします

入力後に「テスト接続」を選択して「正常」となったら「OK」を選択して設定を確定しましょう。

DynamicDNSの設定が反映され、ホスト名が利用できるようになるまでの時間は、DynamicDNSのサービスプロバイダによると思います。

SynologyのDynamicDNSサービスの場合は数分でホスト名が利用できるようになりました。

ホスト名が使えるようになったかどうかは、コマンドプロンプトで「ping ホスト名」が正常に実行できるかどうかで判定できます。

あとはWinSCPの接続設定でホスト名のところにIPアドレスではなくDynamicDNSで設定したホスト名(hoge.synology.meなど)を入力して接続できることを確認しましょう。

まとめ

今回は自宅に設置したSynologyのDiskStation DS220jに外部からアクセスする方法を紹介しました。

VPNやSynologyのQuickConnectを使うのが定番ですが、今回はセキュリティを考えて公開鍵認証をが使えるSFTPで実現してみました。

私の場合はインターネット接続にtransixを使っているためポート開放ができず、IPv6を使って外部から接続する必要がありました。

次回はこのNASをしばらく使った感想を紹介します。

コメント

タイトルとURLをコピーしました