2016年3月20日日曜日

家のPCに外からつなぐ

ずっと家のLAN回線をテザリングでやっていたが
さすがに毎月8G境界を超えました。1000円払って1G買え
とドコモに言われるのが嫌になってドコモ光をつけることにした。
というかドコモやめればという意見もあるが…。

今回ドコモからもらったルータは RS-500KI というもの。
取説
http://web116.jp/shop/hikari_r/rs_500ki/rs_500ki_03.html
この取説によるとVPNを光電話のためにつくった的な話が書いている。
それをしっかり流用して遊ぶ。これを使うとアドレス変換とかしなくてもPCに楽に外からアクセスできる。

最近物忘れが激しいので一応書いておくが、VPNとは
https://ja.wikipedia.org/wiki/Virtual_Private_Network
これのこと。さらに説明する。
①家の外部にあるPC、スマホを家庭内LANに属させるのにつかう機能。
②またそこから発展して例えば中国の人とかが自分の所在地をごまかすのに使う機能。
なんでごまかせるか?
例えば北京の人がロンドンのVPNサーバーにつないだとする。すると北京からブラウザーを動かしてインターネットすると受け手側はロンドンのPCからアクセスしているように見えるため。このためのアクセス先のサーバーは公開されていて公衆VPNという。公衆VPNはいっぱいある。なぜやりたがる人が中国にいっぱいいるかは説明しない。表向きはセキュアな通信がしたいため。

今はVPNといえば②の意味でつかうことが多いのかもだが今回の話は①の意味で家のUBUNTUに外部からアクセスしまーすという話。なお昔②のようなことはproxyでやっていたが、今は流行らないらしい。(重くなるから)

まず外部と接続したルーターのIPを公開する必要がある。このIP、ルーター再起動しないと変わらないはずなので記憶してもいいが、名前をつけることにする。
それには私の解決はきまっていてDDNSを使う。今回もそうした。つかったのはこれ
http://ieserver.net/
というか私がDDNSをつかうときはこれしか使わない。LINUXで使いまわせるのがすでにわかっているから。いつものように名前を決め、cronにスクリプトをセットする。
これで外部からいつも決まったURLでアクセスできる。IPをいちいち記憶する必要がないので便利。

ここからのVPNサーバー立ち上げ作業は
http://ezxnet.com/android/entry5803/
 これのとおりにしたのでOK。すべてうまくいった。

この絵から分かるようにVPNサーバになるのが最適なのはグローバルIPをもつ装置。
そうでない運用は理論的には考えられるが面倒なだけ。
通常これはルーターとなる。ただPCにグローバルIPを振り出す装置をつけてPCをVPNサーバにするのもOKだし、スマートフォンがグローバルIPを持てばそれをサーバにするのも可。softetherとかはこのタイプ。

次にUbuntuからアクセスする方法だけないので書いておく。
まずこのVPN接続の種類をL2TP/IPsecというが
これをサポートするのが
l2tp-ipsec-vpnというパッケージ
基本的には
http://blog.hktechno.net/2013/02/linux-l2tpipsec-vpn.html
でOKだが ただパスワードを平打しないといけないというバグ仕様
http://qiita.com/MasayukiNagamachi/items/3603cd9314212c18c382
誰も直さないのがなんともはや
これでUbuntu12.04以降はOKなのは確認している。

と、ここまでかいたところでもっといいものがあるのに気づいた。
それは
https://launchpad.net/~seriy-pr/+archive/ubuntu/network-manager-l2tp
これをPPAから入れてセットアップする。
やりかた。
sudo apt-add-repository ppa:seriy-pr/network-manager-l2tp
sudo apt-get update
sudo apt-get install network-manager-l2tp-gnome
!!!!!!!!!!!!!!!!!!
sudo service xl2tpd stop
sudo update-rc.d xl2tpd disable
!!!!!!!!!!!!!!!!!!
このあと
sudo restart network-manager
であとはネットワークマネジャーー>VPN設定でいける。
一応画面写真






このやり方の方がNetworkManagerで管理されるのでイケてると思う。
デバッグはこれ
sudo /usr/lib/NetworkManager/nm-l2tp-service --debug
または、
tail -f -n 0 /var/log/syslog
※追記
2回め繋げないようだ


これでつながったらあとはSAMBAでもSSHでもリモートデスクトップでも好きなことができる。
とりあえずスマートフォンからnomachineでリモートデスクトップするのがお気にいり。
あと外にある2台のPCを同じVPNにつなぐと同じLANのマシンとして認識されることにも
注意。つまり離れた人同士でIPを指定してファイル共有とか可能。

※PCのIPの確認方法
191.168.1.1でルーター設定が見えるから
情報ー>DHCPv4サーバー払い出し情報
で分かる。

※PCでサーバーを立ち上げたときポートを開けるのを忘れないこと
gufwで管理するので充分

※VPNの進化系統
PPTP
L2TP/IPsec
SSL-VPN
の順(下が新しい)今回真ん中(L2TP/IPsec)を使った。

※openvpn,softetherというものが最近流行りだしている。これはPCーPCで繋いでルーターとか間にあるものを貫通させるのにつかう。種別としてはSSL-VPNととなる。ルーターもいずれこれになるらしい。

※ openvpnでサーバを認識するのにはファイルをやりとりする。そのファイルをovpnファイルという。拡張子.ovpn

※ softetherはフリーだが有料版もある。PacketiX

※公衆VPNというものがある。
http://www.vpngate.net/ja/
これは国籍をごまかすのにつかう。なぜごまかすかは書かない。
むかし流行ったproxyと似た使い方。

※OpenVPNを商用にしたものの1個がPrivate tunnel
これ
https://www.privatetunnel.com/home/
http://security.hondaclinic.jp/%E6%9A%97%E5%8F%B7%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/opnevpn%E3%82%92iphone%E3%82%84%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%A7%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95/
OpenVPN自体はオープンソースソフトウェア









UbuntuのWi-Fiアクセスポイント化

いま手元にUbuntu 14.04のPCがあるのでこれを
Wi-Fiアクセスポイントにしてみた。

すぐできるとおもったが手間取った。
ジャパニーズの書いた記事を読むと
hostapdをたててNetworkManagerを殺せ的なことが書いているが
面倒なのでやりたくなかった。

まず参考にしたのがこれ
http://ubuntuhandbook.org/index.php/2014/09/3-ways-create-wifi-hotspot-ubuntu/
手順を要約する
①ネットを切れ
②ネットワークマネージャのメニュから編集を選び追加ボタンを押せ
③ドロップダウンからWiFiを選び作成ボタンを押せ
④Wi-Fiタブを開き
 適当な接続名を入れろ
 SSID名も入れろ
 モードはインフラストラクチャをえらべ
 デバイスのマックアドレスにWiFiのMACアドレスを入れろ
⑤WiFiセキュリテイタブで
 WPA & WPA2 Personal
 を選びパスワードを入れろ
⑥IPv4設定で
 方式から 他のコンピューターへ共有 をえらべ
おわったら保存せよ

でさらにつづき
④の接続名のファイルがwifi-hotspotならそのファイルが
/etc/NetworkManager/system-connections/wifi-hotspot
のようにあるのでそのファイルをまずひらけ
gksu gedit /etc/NetworkManager/system-connections/wifi-hotspot
(sudo vi /etc/NetworkManager/system-connections/wifi-hotspot)
この中に
mode=infrastructure
の行があるので
mode=ap
に直せ
 
ですべてOKでつなぐとアクセスポイントができる的なことが書いているが
私の環境ではうまくいかなかった。
 
悪あがきして
ネットワークマネージャーのメニューで
”新しいWi-Fiネットワークを作成”を選んで先ほど作ったものを選ぶと
 
 接続を有効にするのに失敗しました
(32) Access Point (AP) mode is not supported by this device. 
のメッセージが表示される。

実はこれには続きがある  
このPCは実はDualBootであってWindows側ではアクセスポイント化できてたので
ハード的には問題ないのが私にはわかっていた。
そこでさらにさがすと
http://ubuntuhandbook.org/index.php/2014/09/wifi-hotspot-access-point-not-supported/
これにいきあたる
 
結論から言うとドライバーがまずいから差し替えろということ
たまたま私のPCのドライバーも上記ページと同じwl
なので対策も同じにした。ただドライバの追加と削除をGUIからしろ
という指示には耐えられないのでそれは違うやり方にした
以下に書く
①iw list
  を実行
 Supported interface modes:
* IBSS
* managed
のような表示だった。
これがAPをサポートするものなら
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor 
のようにAPが出る。
 
②理屈はともかくこれを実現するためにはカーネルモジュールwlを
brcmsmac
にかえればよい。(その理屈は上記ページをみてください)
まず
sudo apt-get install firmware-b43-installer
のあと
sudo vi /etc/modules
で brcmsmac 追記
さらに
sudo vi /etc/modprobe.d/blacklist.conf
で wl 追記 
 これで再起動すると自動的にAPできてた。
 
ただこのままだと普段のようにWiFiアクセスポイント一覧がでなくなるので
元にもどすときはふたたび両方をコメント(先頭に#)でOK
 
このドライバーの差し替えを上記ページだとGUIからしろとかいているけど
実際やると遅くていやになるのでやめたほうがいい。 
 
結局hostapdを使うのとたいして変わらない手間が出るのが私らしさか…。 

windowsでアクセスポイント化する手法もついでに書いておく
というかアプリを紹介するだけだが。
http://virtualrouter.codeplex.com/
これをつかうとコマンド操作なく一発でできるのでぜひ使って下さい。
つかいかたは好きなSSID、PASSを入れて開始するだけ。
こちらも切れやすいとかIPv6がなんだとか面倒な問題はあるけど
調べたらどこでも載ってるからかかない。