プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Access -> SQL Server への移行 (1/2)

とあるDBを Accessで運用しています。Access での構成は、

フロントエンド(フォーム、レポート、クエリなど)+バックエンド(テーブル)

となっています。バックエンドのaccessファイルに対して、フロントエンドからリンクテーブルを貼る形式です。基本は一人だけが使う構成ですね。

今回、このDBを多人数で使いたい、かつ、外出時も使いたいとの要望があり、 SQL Server に移行することになりました。どうするのが一番簡単に移行できるかと考えてみて、テーブルの部分を SQL Server に移行して、ODBCで接続して、リンクテーブルを貼れば、割と簡単に移行できるのではないかと考えて、試してみました。めったにやらない作業だったので、以下にその際にやったことをメモ書きで残しておきます。

移行前の修正

access を移行する前に、テーブル間の外部キー制約を見直しています。 主に見直した点は、

  • 2つのテーブル間に同じ主キーに対する外部キー(参照整合性制約あり)が設定されている
  • 複数の外部キーを設定してあるテーブルがあって、連鎖削除がある場合に、複数の経路で削除される場合がある

を解消するというものでした。どちらも SQL Server では実現できないというものです。

一つ目については、下記サイトとかがわかりやすいと思います。 www.accessdbstudy.net

二つ目については、マイクロソフトの下記の記事が(比較的)わかりやすいかな。

1 回の DELETE または UPDATE 操作によって起動される連鎖参照動作は、循環参照を含まないツリー形式になっている必要があります。DELETE または UPDATE 操作によって生じる一連の連鎖参照動作の影響を複数回受けるテーブルがあってはいけません。また、連鎖参照動作のツリーはすべての特定のテーブルへのパスが一意である必要があります。ツリーの分岐は、NO ACTION が指定されているテーブルか既定値であるテーブルに到達したところで終了します。 連鎖参照整合性制約

まあ、SQL Server ではできないというんだから、文句言っても始まらないので、テーブル構成の見直しなどで対応しておきます。 ただ、一部のテーブルで、2つのテーブル間に同じ主キーに対する外部キーがあり、ON DELETE CASCADE (と同等の動作)をどうしても実装したかったので、最終的には、SQL Server のafterトリガーを使って実現しました。

若干補足

ちなみに、こういう場合は、下記サイトのように instead of delete トリガーで代替する方法がよく見つかります。今回は、主キー側のテーブルに外部キーが設定されており、これが使えないので、afterトリガーにて実現しました。 www.mssqltips.com

なかなか一筋縄ではいかないですね。

バックエンドaccess ファイルを SQL Server へ移行

Access から SQL Server への移行には SQL Server Migration Assistant を使います。

SQL Server Migration Assistant

下記ページからダウンロードして、インストールします。作業時点のバージョンは 7.0 でした。

Download Microsoft SQL Server Migration Assistant 7.0 for Access from Official Microsoft Download Center

なお、最初デスクトップに作らせたショートカットから起動すると、64bit版が起動して、インストール済みのOfficeが32bit版だったので、起動に失敗してました。

最初は原因が不明で焦ったのですが、ネットを漁るとちらほら似たような情報があり、bit数が違うことが原因だと分かりました。で、スタートメニューから32bit版を起動すると、問題なく起動できました。 Officeは32bit版を使うことを推奨しているんだから、この辺りも気を使ってもらえると嬉しんですけどね>マイクロソフトさん

と、この記事書きながら気づいたんですが、SSMAインストール後に見れるreadmeを読むとインストール要件として、DAOプロバイダーが挙げられています。で、これというのはOficeをインストールすると一緒にインストールされるともあります。SSMAをインストールした環境のOfficeは32bit版だったので、DAOプロバイダーのbit数もおそらく32bitだと思われます。なので、Officeのbit数というよりは、Officeと一緒にインストールされているDAOプロバイダーのbit数といったほうが正確かもしれませんね。 このreadmeのインストール要件にも、Access/Officeが必要、とは書かれてないですからね(移行時にAccessがないと移行できません、なんて制約、うれしくないですしね)。

さて、問題なく起動出来たら、あとは画面のウィザードに従って、SQL Server に移行したいものを選択していくだけです。今回はaccdbファイルに含まれる全テーブルを移行します。

f:id:junichim:20161111151858p:plain

f:id:junichim:20161111151910p:plain

下記の画面で、移行したいAccessファイルを指定します。今回の場合、バックエンドのファイルになります。

f:id:junichim:20161111151919p:plain

テーブル一覧が表示されるので、移行したいテーブルを選択します。画面では全テーブルを指定しています。

f:id:junichim:20161111151929p:plain

SQL Server への接続情報を入力します。今回は、 AWS RDS 上に SQL Server Express Edition (12.0) を立ち上げてそれを使いました。

f:id:junichim:20161111151943p:plain

リンクテーブルを貼るかどうか聞かれるので、状況に応じて設定します。今回はバックエンド側のファイルを移行させるので、作成しませんでした。

f:id:junichim:20161111151952p:plain

上記のようにウィザードに従って作業すると、特に問題もなく作業が完了しました。

一応、移行レポートが表示されたので、あれこれ見ていたら、SQL Server に作成されたテーブルに、SSMA timestamp という謎のカラムが追加されています。 これはなんだ?と思って調べてみると、特に問題はないようです。このままにしとけ、というのが大勢のようなので、特に不都合を感じるまではこのままにしておきます。

stackoverflow.com

再度補足:移行方法について

このDBの開発・運用環境として Access 2013 を使っています。一つ前の Access 2010 まではアップサイジングウィザードという機能があり、これを利用してSQL Server に移行することができたようです。 最初は、Access2010を引っ張り出してきて、この機能を使っての移行も試してみました。一応、こちらのツールでも問題なく移行はできたのですが、nullableのプロパティが全カラムについてnullを許容する、などとなっていました。

これだと、都合が悪いので、SSMAで移行した次第です。

また、他にも SQL Server の管理ツールである SQL Server Management Studio のインポートを使うという手もあるようですが、これだと主キーの設定から再度やらないといけないので、やはり採用しませんでした。

ここまでで、バックエンド側の移行が無事に終わった(ような)ので、次はフロントエンド側Accessの改修作業に移ります。

AWS RDS の SQL Server のネイティブバックアップを使ってみました

最近 AWS RDS の SQL Server を使い始めました(もちろんExpressエディションです)。 いろいろ試していると、ネイティブバックアップという機能を使えるということなので、早速試してみました。

Microsoft SQL Server によるネイティブバックアップおよび復元のサポート - Amazon Relational Database Service

オプショングループの作成

ネイティブバックアップを使うためには、オプショングループに該当するオプションを追加する必要があります。 SQL Server 起動時は何も考えてなかったので、デフォルトオプショングループとなっています。このデフォルトオプショングループにオプションを追加することはできないので、新規にオプショングループを作成します。

RDSの管理画面から、『オプショングループ』を選択して、『グループの作成』を選択します。

f:id:junichim:20161101011059p:plain

『名前』と『説明』に適当な値を入れ、『データベースエンジン』は sqlserver-ex 、『メジャーバージョン』として12.00 を選択します(現在のインスタンスに合わせます)。 問題がなければ、オプショングループが作成されます。

オプションの追加

作成したオプショングループに対して、ネイティブバックアップのオプションを追加します。 対象のオプショングループを選択して、『オプションの追加』を選択します。 『オプション』として、SQLSERVER_BACKUP_RESTORE を選択し、IAMロールがない場合、『新規ロールの作成』をクリックします。

f:id:junichim:20161101011829p:plain

上記のような画面が表示されるので、必要に応じて、IAMロール、S3バケットなどを選択し、場合によっては新規作成します。

『すぐに適用』はこのオプショングループがDBインスタンスに割り当てられていないので、どっちを選択していても大丈夫(なはず)です。 『オプションの追加』ボタンを押すと、選択したオプションが追加されます。

オプショングループをインスタンスに割り当て

わかってみれば、大したことないのですが、実はこれが一番わかりませんでした。 要は、オプショングループをDBインスタンスに割り当てるためには、既存のDBインスタンスを選択して、『インスタンスの操作』から『変更』を選択し、インスタンスの内容の変更画面で、オプショングループを選択する、というものでした。

docs.aws.amazon.com

RDS 知ってると当たり前なのかな?もう少しドキュメントの書き方を工夫して、わかりやすくなってほしいと感じた部分です。

なお、オプショングループの変更と一緒に『すぐに適用』にチェックを入れておきます。『次へ』で確認画面が表示されるので、問題がなければ、『DBインスタンスの変更』をクリックします。 これで、問題が無ければすぐに変更作業が始まります。 しばらくすると、変更が完了となるので(インスタンス画面で確認できます)、新しいオプショングループが割り当てられていることが確認できます。

バックアップの取得

ここまでできたら、早速バックアップを取ってみたいと思います。

docs.aws.amazon.com

こちらのページあるように、 SQL Server Management Studio を起動して、SQL Server に接続します。 『新しいクエリ』を選択して、

EXEC msdb.dbo.rds_backup_database
    @source_db_name=N'database name',
    @s3_arn_to_backup_to='arn:aws:s3:::{bucket name}/{filename}',
    @overwrite_s3_backup_file=0;

と入力して、実行します。 問題が無ければ、しばらくするとS3側にバックアップファイルが作成されています。

取得したバックアップファイルは、同じDBインスタンスに復元できないなど制約はあるものの、復元オプションの一つとして使えそうかなと思っています。

QNAP TS-251+ の設定(バックアップ設定など)

さて、下記の記事などで設定して、QNAP TS-251+ を使い始めましたが、やはりバックアップ設定は早めにやっておいたほうがよいと思います。

QNAP TS-251+ の設定(主に公開設定周り) - プログラマーのメモ書き

QNAP TS-251+ の設定(HDD移設など) - プログラマーのメモ書き

ということで、今回はバックアップ設定を行った話をまとめます。

QNAP でのバックアップ設定について

QNAPではバックアップ設定は、『バックアップマネージャ』を通じて行うことができます。 いろいろな設定方法がありますが、主に、

  • リモートレプリケーション
  • クラウドバックアップ
  • 外部バックアップ

に分類できます。また、リモートレプリケーションでは、

  • NAS to NAS (QNAP NAS にレプリケーション)
  • Rsync (Rsync サーバーにレプリケーション)
  • RTRR
  • Snapshot レプリカ
  • LUN バックアップ

などの選択肢があります。

とりあえず、別のNAS(Netgearの別のNAS, ReadyNas Ultra2)にバックアップを保存する方法を設定したので、それについてまとめておきます。

Rsync によるバックアップの準備

Rsyncによるバックアップを行うために、最初にNetgearのNASのバックアップ用共有を作成し、Rsyncユーザーとパスワードを設定しておきます。

f:id:junichim:20161011162019p:plain f:id:junichim:20161011162043p:plain

次に、QNAPのバックアップマネージャを開き、『バックアップサーバー』→『Rsyncサーバー』を選択します。特に設定は変更しませんが、『最大ダウンロード速度を有効にする』にチェックを入れておきます。 これで準備完了です。

Rsyncによるバックアップの設定

設定は、『バックアップマネージャ』→『リモートレプリケーション』→『Rsync』を選択します。紛らわしいですが、『NAS to NAS』はQNAPのNAS同士でバックアップを設定する際に使うようです。

f:id:junichim:20161011162512p:plain (画面は設定後のためジョブが登録済みになっています)

設定画面が表示されたら、『レプリケーションジョブの作成』ボタンをクリックします。

f:id:junichim:20161011162753p:plain

リモートレプリケーション名に、適当な名前を入れて、リモートサイトの『設定』ボタンを押します。

f:id:junichim:20161011162801p:plain

先ほど設定した、バックアップ先のNASのIPアドレス(または名前)、ユーザー名、パスワードを入力します。『テスト』ボタンを押すと、接続テストを行い、平均速度などを計測して表示してくれます。設定に問題なければ『適用』ボタンを押してください。

次に、『ソースフォルダ』(QNAP側のフォルダ)と『宛先フォルダ』(バックアップ先サーバーのフォルダ)を選択します。 なお、ここでの設定は、あくまでのローカルNASのフォルダを、リモートサーバーのフォルダにバックアップするという設定であり、反対向きの設定はできませんので、ご注意ください。

設定に問題がなければ、『追加』ボタンを押してフォルダ情報を追加します。

最後に『バックアップ周期』ボタンを押して、定期的にバックアップする際の周期などを設定します

f:id:junichim:20161011163358p:plain なお、すぐにバックアップを行わないならば、『バックアップをただちに実行します』のチェックを外しておきます。

最後に適用ボタンを押して登録すれば完了です。

あとは登録したスケジュールでバックアップが実行されていることを確認すれば完了です。

備考

さて、今回 QNAP でバックアップの設定を行いましたが、Netgear と比較すると結構異なっています。気づいた点をちょっと書いておくと

項目 Netgear ReadyNas Ultra2 QNAP TS-251+
共有フォルダへのバックアップ ×
リモートからローカルへのバックアップ設定 ×(バックアップ自体は可能だが設定はリモート側で行う必要がある)
外付けディスク等へのバックアップ
Amazon S3 へのバックアップ ×

実際に設定してみると、Readynas の共有フォルダへのバックアップはお手軽にバックアップを設定できて、それはそれで便利だったんだなと実感できました。 まあ、この後、S3へのバックアップも設定する予定なのと、dockerを試したいので、メインのNASとして ReadyNas を使い続けるという選択肢はないのですが。

あと、地味なところとしては、QNAPでは、バックアップが完了した際の完了通知が無いようです。外部デバイスへのバックアップだと設定できるみたいですが、Rsyncの場合は通知が来ません。この辺りは選択できるようになってほしいところです。

QNAP TS-251+ の設定(HDD移設など)

以前の記事でQNAP TS-251+ を導入した話を書きましたが、その続きです。

ここでは、既存のNASからデータをコピーして、いろいろと設定してゆきます。なお、既存のNASは、Netgear ReadyNas Duo で 2TB HDD × 2台(RAID 1)構成となっています。

アンチウィルス

一応、有効にしておきます。ダッシュボードから『コントロールパネル』→『アプリケーション』→『アンチウィルス』を選択し、『アンチウィルスを有効にする』にチェックを入れれば終わりです。

f:id:junichim:20161011152700p:plain

既定の共有フォルダの設定

  • Public
  • Web
  • homes

があります。 PublicはゲストアカウントでもR/W OK としておきます。 Webおよびhomesは当面使う予定がないので、共有名を非表示にしておきます。

あと、disk01という共有フォルダを追加しておきます(名称は既存のNASから引き継いでいる共有名なので、深い意味はありません)

ユーザー設定

既存のアカウントは管理者用として置いておくので、日常使い用のアカウントを作ります。 ユーザーとユーザーグループを追加して終わりです。ただし、一つ注意しないといけないのは、GUIからは、uid/gidの変更ができません。ですので、他のNASと混在して使うなどの場合は、SSHでログインして変更してやします。

uid 変更

uidの変更はsshでログインしてシェルから変更します。ちなみに、gidも変更する場合もあると思いますが、今回の環境だとgidは同じだったので、省略しています。

[/etc] # cat passwd
・・・
mor:x:500:100:Linux User,,,:/share/homes/mor:/bin/sh
[/etc] # 
[/etc] # usermod -u 1002 mor
[/etc] # cat passwd
・・・
mor:x:1002:100:Linux User,,,:/share/homes/mor:/bin/sh
[/etc] # 

既存の公開ディレクトリの所有者も変更しておきます。既存の公開ディレクトリは、/shareを見るとシンボリックリンクが作成されているので、それからたどるのが早いと思います。

[/share] # ls
CACHEDEV1_DATA/ HDD_DATA/       HDH_DATA/       HDL_DATA/       HDP_DATA/       HDT_DATA/       HDX_DATA/       Web@
HDA_DATA/       HDE_DATA/       HDI_DATA/       HDM_DATA/       HDQ_DATA/       HDU_DATA/       HDY_DATA/       disk01@
HDB_DATA/       HDF_DATA/       HDJ_DATA/       HDN_DATA/       HDR_DATA/       HDV_DATA/       HDZ_DATA/       external/
HDC_DATA/       HDG_DATA/       HDK_DATA/       HDO_DATA/       HDS_DATA/       HDW_DATA/       Public@         homes@
[/share] # 

上記の場合なら、Public Web homes といったデフォルトのものと、自分で作成した disk01 という公開フォルダがあることが分かります。

それぞれの公開フォルダ内で

[/share/disk01] # chown -R mor ./xxxxx

のようにして、所有者を自分にしておきます。

データのコピー

さて、既存のNASからデータをコピーしてやります。PC経由で2台のNAS間のファイルコピーをしてもよいのですが、その間PCが実質的に使えなくなるので、ちょっとやめました。 ということで、既存のNAS(Netgear Readynas Duo )から TS-251+ に対して、バックアップ機能を使って、TS-251+の共有フォルダにファイルをコピーしてやります。 ユーザーが自分だけなので、これでもなんとかります。

コピー対象となるデータ量が、約150GB程度で、約5時間程度でコピーが完了しました。

実は、単純にファイルコピーを行う前に、Rsyncを使ったバックアップでデータのコピーをしようとしたのですが、これが信じられないぐらい遅かったです。一晩経って、15GBだったかな? 何か設定ミスがあったのかもしれません。

HDD の移設

さて、既存のNASのHDDが2TBあるので、それをTS-251+に移して、既存NASには新たに購入した1TBのHDDを入れて、家族のデータを保存するのに使う予定です。 TS-251+は、こちらの記事でも書いたように、テスト用に1TBのHDDが1台セットアップ済みです。 このあたりの状況をまとめておきます。

NAS名称 HDD台数
TS-251+ 1TB HDD 1台
ReadyNas Duo 2TB HDD 2台

これを

NAS名称 HDD台数 備考
TS-251+ 2TB HDD 2台
ReadyNas Duo 1TB HDD 2台 1台はTS-251+から、もう1台は新規購入済みのもの

となるように入れ替える予定です。

まず最初に、ReadyNAS Duo からHDDを取り出します。 ホットスワップに対応しているので、何も考えずにフロントベイから抜いてしまいます。あ、もちろん作業前にはバックアップは取ってます。

次に、TS-251+ の空いているスロットへHDDを追加します。 こちらもホットスワップに対応しているので、何も考えずにHDDを認識してくれます。

f:id:junichim:20161007005649p:plain

ただ、このままではHDDは認識しているものの未使用の状態です(この辺りはHDDを認識すれば、勝手にRAIDに組み込んで使えるようになる ReadyNas の便利さが実感できます)。 『ストレージマネージャ』→『ストレージ領域』を開き、自分のストレージプール(この場合は『ストレージプール1』)を選択して『管理』ボタンを押します。

f:id:junichim:20161007005945p:plain

さらに、表示された画面下部の『ストレージプール1のRAIDグループ』にある『管理』ボタンを押します。

f:id:junichim:20161007010103p:plain

すると、移行画面が表示されます。

f:id:junichim:20161007010131p:plain

この画面は、現在のシングルディスクの状態からRAID1の状態に移行するための画面になります。 画面下部の『適用』ボタンを押すと、追加したHDDを組み込んでRAID1を構成してくれます。問題なく構成が完了すると、こんな画面が表示されます。

f:id:junichim:20161007010343p:plain

2台のディスク容量が異なっていても問題ないのがいいですね。

あと、同様の手順を踏んで、2TBのディスク2台でRAID1を構成した状態にします。 でも、最初に作成したボリュームの容量から自動的には増えてくれません。 それを増やすために、

f:id:junichim:20161007013556p:plain

にある『管理』から『容量の拡張』を選択します。

f:id:junichim:20161007013630p:plain

画面下部にある『容量の拡張』ボタンを押すと、ストレージプールとして容量を増やしてくれます。 ちなみに、上部にある『変更』とは、ディスクを入れ替えるときに使うようです。

次に、ディスク領域を増やします。今回は、ディスク領域全体を単一のボリュームとして利用します。 ストレージマネージャを開いて、『ストレージ領域』→データボリューム(DataVol1)を選択します。 f:id:junichim:20161011155815p:plain

この状態で『管理』ボタンを押します。

f:id:junichim:20161011155839p:plain

上部に『ボリュームの拡張』ボタンがあるので、そちらをクリックします。

f:id:junichim:20161011155913p:plain

新規ボリュームサイズを入力することができるので、拡張後のサイズを入力します(今回は『最大に設定』ボタンで設定します)。 『適用』ボタン押下後、しばらくたつとステータスに『準備完了』と表示されれば、終わりです。

とりあえず、これで使い始めることができるようになりました。

QNAP TS-251+ の設定(主に公開設定周り)

自宅のファイルサーバーとして、何台かのNASを使っているのですが、このたび、QNAP の TS-251+ を導入することにしました。 元々は、Netgear のNASばっかりだったのですが、もやし工房さんの記事を見て、Dockerが使えるのと、Netgear の NASでS3にバックアップを取れなさそうだったので、今回はQNAPを選んでみました。

www.moyashi-koubou.com

あ、Netgearの件は少し前に調べたので今は状況が異なっているかもしれません。なのと、GUIで簡単に設定するのがないだけで、SSHでログインして自分でS3へのバックアップを実行するようにすれば全然問題なく実現できると思います。

まずは、Dockerを使い始める前に、初期設定(主に公開設定周り)した話をまとめておきます。

あと、試したのは下記になります。

  • QNAP TS-251+
  • QTS 4.2.2

セットアップ

筐体を開けると、最近の機械の御多分に漏れず、簡単設定の方法が書かれた紙が入っていました。 本体にネットワークケーブルとHDDを追加して、電源を入れて、PCのブラウザで https://start.snap.com にアクセスして、筐体に書かれたアクセスコードを入力すればOK!

で、画面の設定に従って、必要事項を入力していけばいい・・・はずなのですが、この時点でいろいろと聞かれるので、まずこれが分かりにくい。 初期設定だけなら大したことしないだろうと思っていたので、画面キャプチャしなかったので、詳細を覚えてないのですが、いくつか設定する項目がありました。

  • myqnapcloud.com のアカウント登録(e-メールアドレス、パスワード)
  • myqnapcloud.com 上で使うデバイス(NAS)の名前
  • NAS 本体の名前
  • NAS の管理者用パスワード
  • NTP サーバー名

その他は確かデフォルト設定だったと思います。

で、一番わかりにくかったのが、(大して下調べもしてなかったのが原因ですが)myqnapcloud.com のアカウントって何?というところでした。 まあ、あとから、いろいろ調べてわかったのが、QNAPのNASをインターネット経由でアクセス可能とし、主にその際の公開設定などを行うためのサービスとなるようです。 NAS本体のセットアップだけを行うと思って、作業を開始していたので、この設定も同時に行わないといけないのに、ちょっとびっくりです。まあ、仕方ないのかな?もし、次にQNAPのNASを入れるときなったら、インターネット経由ではなく、ローカル環境で閉じた形でやってみるかな?

ストレージ設定

いろいと機能を試す間、ストレージにはとりあえず1TBのHDDを1台入れました。 設定方法はたいして覚えてないのですが、QTSデスクトップから『ストレージマネージャ』を起動して、あれこれしたように思います。

ただ、割り当ては、1TBまるまるストレージ領域として割り当てたのですが、システムがスナップショットなどに200GB近く予約してしまい、思ったよりユーザー領域が少なくなった印象でした。もっとも、このあたりの割り当て量はいろいりと変えられそうなので自分の目的に合わせて調整すれば良いかなと思います。

公開設定

で、セットアップ時に気になった myqnapcloud.com のアカウントですが、初期状態では NAS にインターネット経由で接続可能です。 試しに、myqnapcloud.com でデバイス名(公開用のNASの名前)を入力して検索すると、見事に表示されてしまいます。

f:id:junichim:20161004095759p:plain

ここで、 QTS Desktop を選択すると、なんと!NASの管理画面に入れてしまいます(もちろん、ユーザー名とパスワードは必要です)。同じく、File Station を選べば、NASに保存してあるファイルにもアクセス可能です。 便利といえば、便利ですが、プライベート用途のNASを公開設定で使うことは(当面)ないので、セキュリティ向上のためにも、いろいろと設定変更してみます。まずはいろいろと試したので、その様子を書いておきます。

デバイス検索の禁止

まずは、myqnapclod.com において、デバイスそのものの検索を禁止することができます。 QTSデスクトップの『myQNAPclod』→『アクセスコントロール』→『デバイスアクセス制御』で、プライベートを選択すると、myqnapcloud.com 画面から検索できなくなります。

f:id:junichim:20161004101401p:plain

ポート番号変更

デフォルト状態では、UPnpにより、以下のポートが(外部向けに)ルータに空いています。

  • 8080 : QTS Desktop, http
  • 8081 : Webサーバー, https
  • 8082 : QTS Desktop, https
  • 8083 : Webサーバー, http

ルータでUPnpの様子を表示させると、下記の様になっています。

f:id:junichim:20161004092739j:plain

それぞれが対応するポート番号もわかると思います。

このうち、内部ポート番号の8080番(QTS Desktop, http) は、QTSデスクトップから『コントロールパネル』→『システム設定』→『一般設定』→『システムポート』で変更することができます。 同様に、8081番のポート番号は、『コントロールパネル』→『アプリケーション』→『一般設定』→『Webサーバー』→『セキュア接続を有効にする』で変更することができます

これらはポート番号を変更すると、同時に対応する外部向けのポート番号も変更されます。 f:id:junichim:20161004093846p:plain (上図は、8081番を8084番に変更した場合の様子)

ですが、8082番、8083番のポート番号を変更する方法はわかりませんでした(443や80を変更すると、ローカル側のポート番号が変更されるため、単にUPnPで開けたポート番号からは接続できなくなります)。

プライベート化

もう少し試してみます。 デフォルト状態ですと、いくつかのサービスが公開状態になっています。 f:id:junichim:20161004095109p:plain

このうち、NAS Web (安全なNASウェブ)というのが QTS Desktop への接続になります。この『公開』状態は、myqnapcloudでストレージを見つけたら、誰でもアクセス可能になっている状態です。

f:id:junichim:20161004095759p:plain

ここで、『プライベート』にチェックを入れるとmyqnapcloud.comからアクセスしする際に、プライベートタブを開きますが、

f:id:junichim:20161004095742p:plain

のように、ユーザー名とアクセスコードの入力を求められます。なお、アクセスコードはプライベートにチェックを入れると、設定画面の下部に設定欄が表示されるので、そちらで入力可能となります。

公開停止

プライベートの機能は別の誰かにアクセスコード等を伝えて、共有するときに使います。でも、自分一人で使うなら、公開そのものが無くても問題ありません。 というときは、さきほどの設定画面で『公開』のチェックボックスを外して、公開そのものを取りやめてしまってもOKです。

注意点

さて、上記に書いたような方法で、外部からのアクセスを制御できるかと思いますが、これらはあくまでも myqnapcloud.com 経由でのアクセス設定を管理しているだけです。なので、アクセス用のURLを直接指定してブラウザでアクセスすれば、上記設定に関係なくアクセス可能です。ま、考えてみれば、NAS を自宅のLANの外部に公開するために、UPnP によりルータに穴をあけて、DDNSでURLを割り当てているので当然ですね。

外部ポート利用の停止

さて、いろいろと書いてきましたが、自宅のNASをインターネット上に公開してアクセスするのは、特段の理由もない場合は、怖いだけです。

ということで、最終的には、外部向けの公開を停止します。 QTSのデスクトップから『myQNAPcloud』→『自動ルータ構成』を選択し、『UPnPポート転送を有効化』のチェックを外します。

f:id:junichim:20161004100124p:plain

また、DDNSも不要になるので、『My DDNS』を選択し、『myQNAPclodd DDNSサービスを有効にする』のチェックも外しておきます。

あと、myqnapcloud.com でのデバイス検索をプライベートにし、公開サービスもなくしておきます。まあ、 myqnapclod.com を使わないのであれば、アカウントをサインアウトしてもよいのですが、ちょっと様子を見ようとも思いますので、このようにしました。

f:id:junichim:20161004104632p:plain

その他

もう一つついでに、QTS Desktop へのアクセスはhttpsに限定し、ポート番号も443から変更しておきます。 デフォルトでは、Web公開フォルダにある index.php が http://IPアドレス でアクセスすると、管理用インターフェースにリダイレクトする設定になっているので、このファイルを削除して、空の index.html ファイルを入れておきます。 あと、『コントロールパネル』→『セキュリティ』→『ネットワークアクセス保護』を表示して、『ネットワークアクセス保護を有効にする』にチェックを追加し、SSH/HTTPS/SAMBA にもチェックを入れておきます。

とりあえずこれで、自宅のLAN内部に侵入された場合も多少は防御できるかな?

次は機能的な面の設定をあれこれ触ってみたいと思います。

(参考)

chimtty.blogspot.jp