WPJ40-10をモバイルルーター用途として使った感想
auからmineoにMNPで移行して通信代も下がり、2年縛りなどからも解放され、ハッピーなこの頃です。
ただmacbookを最近持ち運んだりするのでネット環境が欲しいのですが、auのiPhoneではmineo的にテザリングができません。そこでもう一つSIMを契約してモバイルルータ用として使いたいなと思い始めました。mineoで追加でデータ専用プランを契約しても、パケットをシェアできるので余った分は本回線にチャージできて、1回線で容量を増やすのと総額がほとんどかわらないので。
それでモバイルルーターを探そうかと思ったのですが、最低でも1万円以上はしてくる代物。それだったらテザリング専用のスマホをもう一台買ってもいいのではないか、その方がいろいろ楽しそうと思って、スマホを見ていました。そうすると、NTT-X StoreでWPJ40-10 というWindow 10 mobileのスマホが5000円弱で売っていました。前置きが長かったですが、値段につられてテザリング用として購入したWPJ40-10をあくまでモバイルルーターとして見たときの感想を書いていきます。
売れ筋モバイルルータとスペックを比較
価格.comでSIMフリーのモバイルルーターで1位(2017/1/21現在)になっているAterm MR04LNと比較して見ます。なお、MR04LNは出張に行く時に会社から借りたりしてよく使っています。
項目 | WPJ40-10 | Aterm MR04LN |
サイズ | 62.8 × 124.5 × 9.9mm | 63 × 111 × 11mm |
重さ | 136.8g | 111g |
対応LTEバンド | 1/3/8/19 | 1/3/8/11/18/19/21/17 |
WiFi | IEEE802.11 b/g/n | IEEE802.11 ac/n/a/b/g |
SIMスロット | microSIM | microSIM*2 |
バッテリー容量 | 1800mAh | 2,300mAh |
連続待ち受け時間 | 最大約150時間 | 休止状態時 約250時間 ウェイティング時 約30時間 |
まず大きさはほぼ違いがありません。 重さはややWPJ40-10の方が重いですが、手にとって使うものではないので、持ち運びだけを考えればほとんどきになる違いではありません。
対応バンドですが、MR04LNの方が広くカバーしています。ただ、docomo系を使う場合はWPJ40-10もプラチナバンド含め主要なバンドは抑えていますので、困ることはないと思います。
WiFIは11acなどに対応していません。ただ、モバイルルータとして使う場合、速度のボトルネックは基本LTEになるので、WiFiの実行速度的にはacでなくても影響はほとんどないのではないかと思います。使用していてきになることはありません
SIMは1枚しかさせませんので、DSDSをしたい人には当然むきません。自分的には困りません。
バッテリー容量は小さめです。ただのちに述べますがバッテリーがすぐに減って使いにくいということはありません
実際につかってみてどう?
だいたい一週間ですが、通勤途中や昼休みにテザリングする目的で持ち歩いて見ました。 印象としては、バッテリーは十分持つなぁというところです。WiFiでテザリングをしたままにしても(Macbookがスリープしながら繋がっている状態)、朝から夜まではなんとか持ちました。 Bluetoothのみにすれば1日は十分余裕です。
スマホと考えると液晶は悪いですが、モバイルルータと比較したら画面は(当然ですが)格段によいです。タッチパネルの使用感もよいです。
一方でレスポンスにはちょっとストレスを感じます。 画面が消えている状態で電源ボタンをおして画面がつくまで、1秒くらいかかってしまい「あれ、ボタン押し損ねたかな」ともう一度押してしまうとことがよくありました。ここは減点ポイントです。(起動してからの操作レスポンスは良好です)。ただモバイルルーターと考えれば(以下略)
初期設定という意味では、モバイルルータよりも手がかかります。スマホの設定をしなければいけないですから・・。 mineoの情報はもともと入っていたので、SIMをさして、mineoを選択するだけで無事に繋がりました。 ただ、Windowsアップデートが時間がかかります。まあiOSでも通る道なので、スマホと考えれば仕方ないですが・・
着せ替えカバー(色違い)、液晶保護シートが製品に付属しているのはポイント高いです(特に保護フィルム)。
便利機能
Windows 10 mobileにはMS-TTCという機能があります。これは、Windows PCなどからBluetoothでペアリングしたWindows 10 mobileのテザリングをオンにすることができる機能です。つまり、普段はテザリングをオフにして持ち歩いておいて、カバンからスマホを出さなくても必要に応じてPCからテザリングをオンにできるという優れものです。
ただ、Windows 10には標準機能として搭載されているのですが、Macには当然そのような機能はありません。。。自分はMacbook使っているので恩恵は受けれないかと思いつつ、MS-TTCはオープンなプロトコルらしく、仕様が公開されていました。
「自分で実装すればMacからでもできるんでは!?」と思って試したところ、無事MacからWPJ40-10のテザリングをオンにすることができました!これで普段テザリングオフで持ち運べるようになったのでかなり便利に。この辺りはまた後日まとめます・・。
結論
もちろんモバイルルーターに特化したMR04LNなんかと比べてしまうと、スペック的には落ちる点は多いですが、普通に使う分には十分モバイルルーターがわりとして使えてます。docomoだったら十分電波拾いますし、バッテリーも十分もちます。
しかも、Windows 10 mobileが触れるというおまけ付き。モバイルルーター用途だけでも十分すぎるほどお買い得だと思います。
観賞用に4k動画をfullHDに変換
4Kテレビを購入したもののなかなか4Kのコンテンツがなかったということもあり、子供の成長を動画で撮るために4Kビデオカメラを購入しました。
ただ、いざ4K動画を4Kテレビで見ようとすると、ビデオを直接テレビ繋いだりしないと表示できず、かなり取り回しが悪いです。NASに4K動画を置いておいてそれをDLNAでテレビで閲覧ということは自分の環境ではできませんでした。
そこで、4K動画は念のため保存しておくとして、観賞用にFullHDに解像度を落とした動画を用意しておくことにしました。基本NASに置きDLNAで鑑賞することを念頭に置いているので、ファイル名から中身がわかると取り回しやすいので、ファイル名を撮影日時に変更することにします。
以下、ASUSTOR NAS AS3102Tで変換した際の手順の覚書になります(詳しい解説は省略)。ASUSTOR NASではデフォルトでffmpegが入っているようで、バージョンは2.8.3のようです。
まず4K動画をASUSTOR NASのフォルダに全部放り込みます。
その後sloginでASUSTOR NASにログインして、対象のフォルダに移動して、以下のようなシェルスクリプトのファイルを作成します。
timestamp.sh
ffmpeg -i $1 2>&1 | grep -B 1 "Video" | grep "creation_time" | sed -e "s/^.* \([0-9]*\)-\([0-9]*\)-\([0-9]*\) \([0-9]*\):\([0-9]*\):\([0-9]*\).*$/\1\2\3\4\5\6/"
conv.sh
for file in `\find . -name "*.MP4" -maxdepth 1 -type f`; do
tstamp=`./timestamp.sh $file`
if [ ! -e $1/$tstamp.mp4 ]; then
echo $1/$tstamp.mp4
ffmpeg -i $file -vf scale=-1:1080 -acodec aac -strict -2 $1/$tstamp.mp4
fi
done
timestamp.shは、指定された動画の撮影日時をyyyymmddhhmmssの形式で出力するスクルプトになります。ffmpegで表示される動画の情報を利用しています。
conv.shは、カレントフォルダ内の拡張しがMP4のファイル全部を、変換するスクリプトです。引数で指定したフォルダに、撮影日時.mp4という形式で出力します。ただし、すでに同名の出力ファイルがある場合変換済みとみなして出力しません。
このうえで、
nohup conv.sh (出力フォルダ) > log.txt &
といったコマンドを打つと変換がはじまりますので、ログアウトして変換が終わるのを待ちます(結構な時間がかかります)
変換後のファイルをUPnP Media Serverで公開することで無事テレビから閲覧できるようになりました。
SONY BRAVIAをコマンドラインから制御したい
最新のBRAVIAで検証したところ、一部下の通りだとうまくいかないケースがありました。
続・SONY BRAVIAをコマンドラインで制御したい - shimobepapaの日記
こちらの記事もあわせて確認ください。
自宅ではSONYのBRAVIAを使用しているのですが、さすがSonyだけあってスマホ用アプリも充実をしていて、スマホをテレビのリモコンがわりに操作できたりします。
ただ、例えばhomebridgeと組み合わせてSiriからテレビを操作したかったり、バッチファイルの中に組み込んでテレビを操作したかったりすると、コマンドラインからテレビを制御したいなと思うことがままあります。そのための方法を調べてみました。
調べ方
SONY製アプリ(TVSideView)のパケットをキャプチャしてWiresharkで解析する
結果
以下、BRAVIA KD-65X8500Bで検証した結果です。
まず、電源オン操作は、Wake on Lanの仕組みを使用しているようです。テレビのmacアドレスを調べたうえで、linux環境ならば、ether-wake(etherwake)コマンドを使用するとテレビをつけることができます。
電源オン以外の操作は、パケットを解析すると、httpプロトコルでBRAVIAと通信していることがわかります。
まず命令を送る前に認証のためのアクセスをして、認証コードみたいなものをクッキーに読み込んでいるようです。
その上で認証コードをクッキーにいれた状態で、HTTPのPUTで命令を送っています。
またはじめて認証コードを取得する際には、テレビ側に四桁の数字が表示されるので、その値をアプリで入力してテレビにアプリを登録する作業が入ります。4桁の数字はBasic認証のパスワードとして送っているようです。(こうすることで、テレビにClientIDが保存されているようです)
コマンドラインから操作するということで、今回はcurlコマンドでBraviaを操作できるようにすることをめざします。
テレビのIPアドレスを固定にしておき、curlをインストールした状態で、以下のようなコマンドを打っていきます。
認証用クッキー保存
curl -d '{"method":"actRegister","params":[{"clientid":"任意のID(例 nas:20161217)","nickname":"テレビ側に登録するニックネーム(例:nas)"},[{"function":"WOL","value":"no"}]],"id":任意の数字,"version":"1.0"}' -c cookie.txt http://(BraviaのIPアドレス)/sony/accessControl
上記コマンドをいれると、はじめて指定したclientidでアクセスする場合は、テレビ側にニックネームと4桁の数字が表示されると思います。(このとき通信結果としては401が返ってきているようです)
この場合は、テレビに表示されている数字をBasic認証のパスワードにして、上記コマンドを再度送ります。curlコマンドでは以下のようになります
curl -d '{"method":"actRegister","params":[{"clientid":"任意のID","nickname":"テレビ側に登録するニックネーム"},[{"function":"WOL","value":"no"}]],"id":任意の数字,"version":"1.0"}' -u :四桁の数字 -c cookie.txt http://(BraviaのIPアドレス)/sony/accessControl
例:
curl -d '{"method":"actRegister","params":[{"clientid":"nas:20161216","nickname":"nas"},[{"function":"WOL","value":"no"}]],"id":8,"version":"1.0"}' -u :1234 -c cookie.txt http://192.168.0.100/sony/accessControl
その上で、以下のコマンドを実行することで、テレビを操作できます
通常のリモコンでできる操作
curl -d '<?xml version=\"1.0\"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:X_SendIRCC xmlns:u="urn:schemas-sony-com:service:IRCC:1"><IRCCCode>(コマンド)</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>' -b cookie.txt http://(BRAVIAのIPアドレス)/sony/IRCC
その他操作
curl -d '{"method":"setPlayContent","params":[{"uri":"(別表のリスト)"}],"id":10,"version":"1.0"}' -b cookie.txt http://(BRAVIAのIPアドレス)/sony/avContent
なにかxmlだったりjsonだったり不思議な感じですが、コマンド、uriに入るものは以下を参照してください
通常のリモコンでできるコマンドの例
電源オフ | AAAAAQAAAAEAAAAvAw== |
Volume up | AAAAAQAAAAEAAAASAw== |
Volume Down | AAAAAQAAAAEAAAATAw== |
チャンネル+ | AAAAAQAAAAEAAAAQAw== |
チャンネルー | AAAAAQAAAAEAAAARAw== |
1 | AAAAAQAAAAEAAAAAAw== |
2 | AAAAAQAAAAEAAAABAw== |
3 | AAAAAQAAAAEAAAACAw== |
... | ... |
12 | AAAAAQAAAAEAAAALAw== |
その他操作のuriの例
uri | 説明 |
---|---|
extInput:hdmi?port=1 | HDMI1に入力切り替え |
extInput:hdmi?port=2 | HDMI2に入力切り替え |
extInput:hdmi?port=3 | HDMI3に入力切り替え |
extInput:hdmi?port=4 | HDMI4に入力切り替え |
tv: | tvに入力切り替え |
extInput:widi?port=1 | スクリーンミラーリング |
グローバルIPアドレスがないけどNASを外部に公開したい
現在住んでいるマンションには無料で使える(管理費に含まれている)ネット環境があり、各部屋まで回線が来ているのですが、グローバルIPアドレスがもらえません。グローバルIPアドレスをもらえるようなオプションもなく、お金を払えばいいというわけでもないです。出先とかでNAS(自宅サーバ)のデータを取得したりいじって遊びたいとか思ってもそのままではできないので、多少のお金を払うことで実現することにしました。
VPSを借りる
VPSというのは、バーチャル・プライベート・サーバの略で、仮想的な専用サーバをレンタルできるサービスです。専用サーバというと高いイメージがあったのですが、月500円くらいで借りることができます。
VPSならDTI|月額467円(税抜) メモリ1GB|ServersMan@VPS
基本的に自分の用途でしたら、一番安いプランで十分でした。安いプランでも固定IPアドレスをもらうことができます。
このVPSサーバにVPNサーバを立ててNASがVPNクライアントとして接続することで、外部からVPSサーバに経由でNASにアクセスできるようにします。
(2020年7月追記)
現時点ではAWS lightsailがおすすめです。3.5$か5$のプランで性能的には十分と思います。
VPSにVPNサーバを設定する。
まずは、VPSの設定をします。
ServersMan@VPNでは、初期に入れるOSを選択することが可能ですが、今回はUbuntu 14.04を入れました。契約するとあっという間にセットアップが終わって、SSHでログイン出来るようになりますした。すごい。
UbuntuへのOpenVPNのインストールは公式ドキュメントに沿って進めます。
apt-getでインストール可能です。必要そうなペッケージも同時にインストールします。
sudo apt-get install openvpn libssl-dev openssl easy-rsa
次に、サーバの認証局・証明書の設定をします。
OpenVPNの認証方式ですが
- 静的鍵方式
- パスワード認証
- 認証書認証
- 二要素認証
という4種類があります。基本的には、下に行くほどセキュリティは高まる一方、設定は面倒になります。認証書証明の設定を紹介するサイトが多いですが、プライベートな使用ではそこまでセキュリティを高めなくていいと思われますので、今回はパスワード認証を採用します。
OpenVPNの証明書について
パスワード認証を採用します、サーバ側の証明書については用意しておきます。ASUSTOR NASだとサーバ側の証明書を設定しないとうまくいかなかったので(正確には、認証局の情報がないとエラーとして弾かれてしまった)、、、
サーバ側の証明書の目的はサーバのなりすまし防止です。「自分のサーバと思って接続したOpenVPNのサーバが実は悪意を持ったサーバでパスワードなどを抜かれてしまった・・」というようなことを防ぐためです。
設定することは以下の通りです。
ちなみに、プライベートな認証局の証明書でなりすましを防げる仕組みについて・・。接続時には、以下の手順を踏んでなりすましサーバでないことをクライアントで確認します。
- サーバからサーバ証明書を受け取る
- サーバ証明書が、プライベート認証局の証明書で署名されてものかを、事前にシェアされたプライベート認証局の証明書を使って確認
- サーバ証明書に含まれている公開鍵情報を元にランダムな数値を暗号化してサーバに送信。サーバはサーバ証明書とセットの秘密鍵を元にランダムな数値を複合かしてクライアントに送り返す。
- クライアントは正しい数値が送り返されることで、サーバが秘密鍵を持っていることを確認できるので、なりすましではないことを確認できる。
事前に認証局の証明書を信頼できる方法で受け取っておくことで認証局の信頼性は担保できますので、プライベートな認証局でも十分ということになります。
認証局の証明書とサーバ証明書の発行
まず、認証局の作成です。OpenVPNが配置されているディレクトリのeasy-rsaサブディレクトリに入れるのがいいようです。
/etc/openvpn/の下にサブディレクトリを以下のコマンドでつくります。
sudo make-cadir /etc/openvpn/easy-rsa
easy-rsaフォルダにある、varsというファイルを書き換えます。
(viを使うなら、sudo vi /etc/openvpn/easy-rsa/vars)
export KEY_COUNTRY="(国)" export KEY_PROVINCE="(都市)" export KEY_CITY="(街)" export KEY_ORG="(組織名)" export KEY_EMAIL="(メールアドレス)" export KEY_OU="(組織単位らしいので適当に)"
あたりを適切な情報に修正します。これらの情報は、認証局の証明書に埋め込まれます。
その上でvi /etc/openvpn/easy-rsaに移動し、以下のコマンドを実行して、証明局を初期化、認証局の証明書(ca.crt)を発行します。
source vars ./clean-all ./build-dh ./pkitool --initca
次にサーバ用の証明書を発行します。
./pkitool --server server
./build-key-server server
easy-rsaフォルダに
ca.crt
ca.key
server.crt
server.key
というファイルができていると思いますので、これらは、
/etc/openvpn/
にコピーしておきます。(後ほど設定ファイルからこれらのファイルを参照するので、設定ファイルで絶対パスを書いておけば、別のフォルダにおいても問題ないはずです)
OpenVPNサーバ設定ファイル
次に、サーバ側の設定ファイルを記述します。
基本的には、
https://www.openvpn.jp/document/how-to/#SampleConfigurationFiles
を元に編集します。
今回は、次のような構成ファイルを作成して、server.confとして保存します。
上で書いたようにパスワード認証方式になります。
# 使用するポート port 1194 # TCP か UDP か proto udp # ブリッジモードを使用する必要がなければtunを選択 dev tun # 認証局の証明書、および、サーバの証明書+秘密鍵 ca ca.crt cert server.crt key server.key # これが秘密鍵になるので公開しない # Diffie hellman parameters.作成したものを指定 dh dh2048.pem # VPNで使用するアドレス空間 # サーバは先頭のアドレス(10.8.0.1)が選ばれるようです server 10.8.0.0 255.255.255.0 # サーバに接続してきたクライアントに対し # 10.8.0.*のアドレスへのアクセスはVPNを通すように、設定を送る push "route 10.8.0.0 255.255.255.0" # クライアント同士も通信できるようにする client-to-client # 10秒ごとpingを送り120秒反応がなければ切断と判断 keepalive 10 120 # 暗号形式を指定。クライアントと合わせる必要がある cipher AES-256-CBC # AES # 圧縮を有効にする。クライアントと合わせる必要がある comp-lzo # 切断が発生したときの再接続などのためにクライアントと両方に以下設定しておくといいみたい persist-key persist-tun # 現在のステータスを出力してくれる status openvpn-status.log # ログの出力先。 log-append /var/log/openvpn.log # ログの出力レベル。数が多いほどいっぱい出力される。0〜9 verb 4 # パスワード認証するための設定。ログインユーザ名とパスワード名をそのままVPNのユーザ名とパスワードに使う plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login # クライアントの証明書を不要にする client-cert-not-required
これを/etc/opnevpn/フォルダにsercer.confという名前で保存します。
これで、OSのユーザアカウントとパスワードで接続できるようになります。NASから接続するためのアカウントとして、 OSのアカウントを作っておくようにします。基本的には一つのアカウントからは同時に1つしかVPNに接続できません。
クライアント設定ファイル
次に、クライアントの設定ファイルを用意します。
ASUSTOR NASむけに設定ファイルを使用する場合、認証局の証明書(ca.crt)は設定ファイルからファイル名を指定する形式ではなく、<CA>タグとして設定ファイル中に、証明書の中身を記述する必要があるようです。
# クライアント用の設定 client # サーバと合わせる dev tun proto udp persist-key persist-tun comp-lzo cipher AES-256-CBC # サーバのアドレス+ポート remote 12.34.56.77 1194 # ノートPCなど常時接続していない環境向け設定。ホストに繋げられなくても諦めず何度も試す resolv-retry infinite # 特定のポートと紐づけるか。通常nobindでOKみたい nobind #以下、ca.crtの中身(ca.crtはテキストファイルなのでエディタで開いて貼り付け)<CA> -----BEGIN CERTIFICATE----- MI(略) (略) (略)xoMsdw= -----END CERTIFICATE----- </CA> # パスワード認証する auth-user-pass # Set log file verbosity. verb 3 # ログの出力先
log-append /var/log/openvpn.log
# Silence repeating messages ;mute 20
これをVPN Clientに読み込ませて接続することになります。
ASUSTOR NAS AS3102Tでの設定
ASUSTOR NASにはデフォルトでOpenVPNの機能が入っています。
Webの管理ページの「設定」から「VPN」を選び、「追加」をクリックします。
接続タイプとして「OpenVPN」を選び、「OpenVPNプロバイダーから構成ファイルをインポートする」を選択します。
名前は、識別用なので自由に設定します。 アカウント、パスワードは、先ほど設定したNAS用のアカウントのものをいれ、「ファイルをインポート」で、先ほど作成したクライアント用の設定ファイルを指定してください。
これで設定は完了です。
接続をクリックして、接続できることを確認します。
NASにsshでログインして、pingで10.8.0.1(VPNサーバ)へ通れば無事成功です。うまくいかない場合は、クライアント、サーバ双方のログを見ながら解決していくことになります。
上記の設定で、VPSへsshでログインし、そこからさらにNASにアクセすれば、一応外部からNASへアクセス可能になりました。
ただ、例えばVPSのアドレスへhttpで(80番ポートに)接続したら、VPSではなくNASのレスポンスを返したい、といったこをするためには、ルータのポートフォワーディングみたいなことを、VPSサーバで行う必要があります。
そのためにはまず、NASが接続した時のVPN側アドレスを固定にしないと不便です。
OpenVPNでパスワード認証で接続した時、特定ユーザに固定IPを付与する方法
VPNサーバ側の設定変更が必要になります。
OpenVPNの機能として、クライアントのcommon nameに応じて固定IPを割り振ることができます。ただ、そのままの設定ではユーザ名がcommon nameにならないので、server.confに次の一行を追加します、
username-as-common-name
その上で、次の一行も追加します。
client-config-dir ccd
クライアントごとの設定がccdに入っていますよ、という意味になります。
クライアントごとの設定ファイルの場所として
/etc/openvpn/ccd
が指定されたととになりますので、このフォルダを作成し、ここにユーザ名をファイル名にしたテキストファイル(ユーザ名がnasならば、nasという名前のファイル)を作成します。
そのファイルには、例えばIPアドレスを10.8.0.100に指定したい場合、
ifconfig-push 10.8.0.100 10.8.0.99
というように記述します。10.8.0.99は別になんでもいいのですが、tunの場合、インターフェースに別のIPアドレスが必要になりますので、インターフェースのIPも別途指定する必要があるためこのような記述になります。
こうして、OpenVPNサーバを
service openvpn restart
などとして再起動し、クライアントから再度接続すれば10.8.0.100が割り振られるようになります。
VPSの特定のポートにきた通信を、特定IPの別マシンにフォワードする方法
ルータのポートフォワーディングみたいなことをVPSで行う方法です
iptablesを使うことになります。
iptablesは詳細な説明は避けます。すみません。
例えば、VPS(仮にグローバルIPを12.34.56.78とします. VPN側は10.8.0.1)の8080番ポートにきたものをNAS(10.8.0.100)の80番ポートに流す場合、次のようなコマンドを打ちます。
iptables -t nat -A PREROUTING -m tcp -p tcp --dst 12.34.56.78 --dport 8080 -j DNAT --to-destination 10.8.0.100:80
iptables -t nat -A POSTROUTING -m tcp -p tcp --dst 10.8.0.100 --dport 80 -j SNAT --to-source 10.8.0.1
一行目が、8080番ポートにきた通信を、NASの80番ポートに流す設定
二行目が、その通信の送り元を10.8.0.1(VPSのVPNアドレス)にするという設定です
また、そもそものiptablesの設定として、基本ポートへの接続を受け付けない設定になっていることがあります。
iptables -L
とうって、INPUT /OUPUTなどがpolicy ACCEPTになっていることを確認します。
もし、意図してDROPしている場合は、特定のポートを受信できるようにしておく必要があります。
こうすることで、 ルータのポートフォワーヂングのような形で、VPSの特定ポートへのアクセスをNASに渡すことができるようになります。
こうすることで、NASのWebサーバを外部に公開するといったことが可能になります!
グローバルIPがなくても外部からLANにアクセスしたい
前回、VPSサーバを借りることで、グローバルIPアドレスがない環境でNASを外部からアクセスできるようにする方法を紹介しました。VPSサーバをVPNサーバにして、NASをVPNクライアントとして常時接続しておく方法です。
今回は、NAS以外のLANにある端末もVPN経由でアクセスできるようにすることを目指します。状況としては下図のような状況で、出先でノートPCから家にあるPCへアクセスすることを目指します。
このためには、以下の4つの設定をする必要があります。
1. VPN接続したクライアントが192.168.1.*あてのアクセスを VPNへアクセスするように設定する
2. VPN内で192.168.1.*のアドレスはNASに送られるように設定する
3. NASはVPNから届いた192.168.1.*宛の通信を、LANに流すようにする。またLANから届いた10.8.0.*宛の通信をVPNに流すようにする
4. LAN内のPCから10.8.0.*にアクセスしようとした場合、NASへパケットを渡すようにしなければいけない
1. VPN接続したクライアントが192.168.1.*あてのアクセスを VPNへアクセスするように設定する
VPNに接続したクライアントは、前回した設定ではすべての通信をVPNを通してするわけではなく、10.8.0.*宛の通信のみをVPN経由で行うようになります。そのため、192.168.1.*にアクセスしようとすると、VPN経由ではなく普通にインターネットに192.168.1.*を探しにいってしまいます。
192.168.1.*のアクセスもVPNを通すようにするために、サーバの設定ファイルに
push "route 192.168.1.0 255.255.255.0"
という記述を追加します。これで、192.168.1.*宛の通信がVPNを通るようになります。
2. VPN内で192.168.1.*のアドレスはNASに送られるように設定する
前回、VPNサーバの設定ファイルに
username-as-common-name
client-config-dir ccd
という二行を足しましたが、そこにさらに次を追加します。
route 192.168.1.0 255.255.255.0
その上で(nasというユーザ名で、NASが接続している時)、前回さくせいした
ファイルに、
iroute 192.168.1.0 255.255.255.0
という一行を追加します。こうすることで、192.168.1.*宛のパケットが、NASに向かうようになります。
3.NASはVPNから届いた192.168.1.*宛の通信を、LANに流すようにする。またLANから届いた10.8.0.*宛の通信をVPNに流すようにする
IPフォワードという機能を有効にする必要があります。
こちらは、参考にしたページを紹介させていただきます。
Linuxでiptablesとかフォワーディングとか - mokky14's IT diary
ASUSTOR NASでも上記のページと同じ方法で、IPフォワードを有効にすることができました。
4. LAN内のPCから10.8.0.*にアクセスしようとした場合、NASへパケットを渡すようにしなければいけない
基本、192.168.1.* というアドレスから、10.8.0.*といったアドレスへ通信を行おうとしたら、デフォルトゲートウェイであるルータにまずはパケットを送ります。そのため、ルータが10.8.0.*宛のパケットを受け取ったら、NASヘ転送するように設定する必要があります。
ルータの設定の仕方は、ルータのメーカによって名称が違うようですが、例えばAterm(NEC)ならば、「静的ルーティング」という機能を使います。宛先アドレス「10.8.0.0/24」のゲートウェイをNASのアドレスを指定してあげることで、10.8.0.0/24宛のパケットをNASへまわすことができるようになります。
1〜4の設定をすることで、VPN接続したクライアントからLAN内のマシンにアクセスできるようになります。macの画面共有などVPN経由で試して見ましたが、ばっちり動作しました。
自宅サーバとして使用する基本
AS3102TはApacheなどの基本的なサーバとしての機能は、Webインターフェース(AMD)で設定することができます。
公式のサポートページなど色々説明がありましたので、参考にしながら設定すれば基本的な機能は使うことができます。
それ以上に色々しようと思った場合は、端末にSSHでアクセスできるようにして(ADMのサービスから端末を選択、SSHサービスを有効にする)、コマンドラインから各種設定を行うことで実現できます。
ASUSTOR NASのOSはAMDと書かれておりますが、カスタマイズされたLinuxのようです。ただ、通常のディストリビューションとは色々違うので、苦労します。
entware-ng
apt-getのようなパッケージ管理ツールですが、ASUSTOR NASではentware-ngというものが利用できます。entware-ngはApp Centralからインストールできます。まずはこれをインストールします。その後、SSHでログインし、色々必要なパッケージをインストールします。
(とりあえず必要なコマンド)
opkg update リストをアップデート
opkg list インストール可能なパッケージの一覧
opkg insall インストール
gccや、makeなどもこちらからインストールしないと使用できません。
インストールしたものは、基本/opt/binに格納されるようです。
場合によっては(元々入っているApacheで動かしているcgiからコマンドをよびだした時とか)、/opt/binにパスが通っていなくてエラーになることもあったので注意が必要です。
あともう一点注意点ですが、entware-ngではopkg installでインストールしても、ヘッダーファイルがインストールされません。
Using gcc (native compilation) · Entware-ng/Entware-ng Wiki · GitHub
にありますように、ヘッダーは別途インストールする必要があります。
初めまして
数年前、RAIDの復旧をミスしてデータを全ロストしてから、しばらくNASを使用していませんでした。しかし、クラウドストレージも使いにくく子供の写真なども増えてきて、やっぱNASが必要と今年初めに NASを新調しました。
4Kテレビや4Kビデオカメラを活かしたくて、4KのHDMI出力がついたASUSTOR 3102TというNASを買い、ANアンプに接続して使用しています。
書き込み速度などのNASとしての基本性能は上々と思いますが、なかなかHDMI出力を活かしたマルチメディアサーバとしては使えていません。なんとなく勿体無く思い、折角だし自宅サーバとして、活用してみようと思い立ち、色々したことを中心にこのブログにまとめていきたいと思います。