見出し画像

リモートネットワーク接続(vpn接続)の設定をした話 その3

こんにちは!

今回は一連のvpnの設定の最終回として、Softether VPNをつかった実際のリモート接続と設定をしていたときに起こったトラブルについて書いていきます。公式サイトにも少し触れているとおり、LinuxでSoftether VPNサーバーを立てるときには一癖あるので、そのあたりを残せておけたらなと。


WIMAX側設定

早速Softether VPN serverの設定に移りたいところですが、その前にまずはWIMAX側の設定を済ませます。WIMAXは初期設定ではインターネットからアクセスできない仕様になってので、外部からのアクセスができるようにグローバルIPアドレスを取得します。このあたりの細かい設定は型式にもよると思うので、詳細は割愛します。もし知りたい方は↓あたりが参考になると思います(僕が使っているWIMAXはUQではないですがw)。

グローバルIPを取得するには月額費用かかりますが、せいぜい月100円とかなので誤差と考えてしまっていいでしょう。

これで外部からWIMAXに接続できる準備が整いました。WIMAXの仕様上、グローバルIPアドレスは固定することができず、変動IPになるわけですが、Softetherは便利なことにDDNS(Dynamic Domain Name System)が搭載されているので、起動しているサーバーのグローバルipを検出して自動的に"vpnxxxxx.softether.net"というURLをふってくれます。なので、外部から接続したいときはこのurlを利用すればいいわけですね(何を言っているかわからない方は、とりあえず上記のurlさえあれば接続出来ると考えて頂いてOKです)。当初は無料のDDNSとか使わないといけないかなぁとか思っていたので、こういう機能がソフトの中に搭載されているのはありがたいです。

あとWIMAXでやるべき作業は、ポートフォワーディングですね。特定のポート番号でWIMAXのグローバルipアドレスに飛んできた通信を、ネットワーク内に振り分けるという作業です。具体的にはサーバーマシンのプライベートipアドレス(192.168.179.7)に対し、「5555」をTCPで、「500」と「4500」をUDPで振り分けておけばOK。後者の2つについては、AndroidやiOSからの接続を行う際に必要となるポートなので、PCからのみの通信であれば「5555」だけでOKのはずです(多分…)。


仮想ハブの生成とローカルブリッジの設定

前回Softether VPN serverの管理ソフトを導入したので、VPNの設定自体はこのソフトウェアを利用して行います。前回も書きましたが、このソフトウェア自体はかなり直感的に操作できるよう作られているので、なんとなく触っていればだいたい設定できてしまいますw

管理マネージャ

注意すべきはリスナー管理の部分で443ポートを停止しておくことですね。今回VPNサーバーを立てるPCは、WEBサーバー「apache」も兼ねているので、Softether VPNで443ポートを使ってしまうとポートを取り合ってしまいます。はじめはそれに気づかなかったんですが、しばらく動かしているうちにapacheが起動できていないという事象が発生し、ポートの競合が判明しましたw 

サーバーに接続したら、まずやるべきことは仮想ハブを生成すること。仮想ハブとは、その名の通りネットワーク構築につかうLANケーブルのハブをコンピューター上に作ったものと考えていただければいいと思います。実際に外から自宅のサーバーに接続するときには、インターネットを使って仮想的なLANケーブルをこの仮想ハブに刺すことで自宅ネットワークに組み入れるようなイメージですね。

仮想ハブの管理画面はこんな感じ。

仮想ハブ

ここでユーザーを追加したり、パスワードを設定したり、ipアドレスで制限をかけたりと、仮想ハブに関する設定ができます。企業などで使う場合はアクセス制限やパスワードの決め方などいろいろと検討が必要だと思いますが、個人で使う場合はそこまでする必要は無いでしょう。今回はiPadとAndroid用にそれぞれユーザーを設定し、パスワードで接続するようにしました。

続いてローカルブリッジの設定です。ブリッジ接続については以前の記事でも書いていますが、今回の場合は仮想ハブと自宅ネットワークをブリッジ接続するために使っています。当初はサーバーPCで構築したブリッジ接続「h_bridge」と仮想ハブをブリッジさせようと思ったのですが、これが上手く行かず(h_bridgeの詳細は過去記事をご覧ください)。この部分がなかなかうまくいかずに結構はまってしまいましたw


Linuxの仕様上の制約

「h_bridge」と仮想ハブのブリッジ接続自体は可能で、一見するとそれで問題なさそうだったのですが、実際にやってみたら大きな問題が発生しました。iPadやAndroidからの接続設定を済ませて実際に外から自宅ネットワークに入ったところ、ネットワーク自体には接続できているにも関わらず、肝心のサーバーマシンが見えない!

なかなか理由がわからず右往左往したわけですが、その答えは公式ページにありました。具体的にはこちらのページの3.6.11です。

Linux オペレーティングシステム内部での制限事項により、VPN 側 (仮想 HUB 側) からローカルブリッジしている LAN カードに割り当てられる IP アドレスに対して通信を行うことはできません。この制限は SoftEther VPN が原因ではなく、Linux の内部構造に原因があります。もし VPN 側 (仮想 HUB 側) から Linux でローカルブリッジに使用しているコンピュータ本体と、何らかの通信を行いたい場合 (たとえば VPN Server / VPN Bridge サービスと HTTP サーバーサービスを両方動作させており、VPN 側からもサーバーサービスにアクセスさせたい場合) は、ローカルブリッジ用の LAN カードを用意して接続し、その LAN カードと既存の LAN カードの両方を物理的に同じセグメントに接続してください (この他の場合においても 「3.6 ローカルブリッジ」 で解説したように、ローカルブリッジに使用する LAN カードはそのための単独のものを用意することが推奨されています)。

はい、そういうわけですね。正直、僕はこの文章をはじめて読んだ時に全然理解できなかったのですがw、要するにローカルブリッジ先に割り当てられているIPアドレスには直接接続できないというわけですね。外部から接続しようとしたとき、自宅ネットワークには入れるのにサーバーマシンに繋げなかったのはこのせいなのでしょう。引用した部分の「たとえば…」という部分がまさに今の状況です。

この解決のためにも色々と思考錯誤したわけですが、最終的にはサーバーマシンにTap(仮想ネットワークデバイス)を作成して、それを「h_bridge」に組み込みつつ、vpnのローカルブリッジ先として指定する形で上手く行きました。サーバーマシンに空いているLANポートがあればよかったのですが、それがなかったのでTAPを立てることで解決できました(一応Softether側の推奨としては物理的ポートを準備することのようですが…)。

それに伴って、ネットワークブリッジの記事のところで書いたスクリプトも少しだけ修正します。

#!/bin/bash

BRIDGE=h_bridge   # ブリッジ名
ETH0=enx6ce4dad2efed   # ルータとのインターフェイス
ETH1=enp3s0  # クライアントとのインターフェイス
TAP=tap_local  # tapの追加

GATEWAY=192.168.179.1   # ゲートウェイip
IP_ADDRESS=192.168.179.7   # サーバー側ip

sleep 30;sudo brctl addbr $BRIDGE   # bridge追加
sudo brctl addif $BRIDGE $ETH0   #ブリッジにeth0を追加
sudo brctl addif $BRIDGE $ETH1   #ブリッジにeth1を追加
sudo brctl addif $BRIDGE $TAP   #ブリッジにeth1を追加

sudo ifconfig $ETH0 0.0.0.0
sudo ifconfig $ETH1 0.0.0.0
sudo ifconfig $TAP 0.0.0.0
sudo ifconfig $BRIDGE $IP_ADDRESS
sudo route add default gw $GATEWAY
sudo brctl addif $BRIDGE $TAP


iPad、Androidとの連携

ここまでくればあと一息です。iOSやAndroidなどのモバイル端末からアクセスするためのIPsecというプロトコルの設定を行います。と言ってもやること自体は大したことはなく、共有鍵(パスワード的なもの)を設定するくらいですね。下の図の黒塗りの部分に任意の文字列をいれてあげればOK。

画像3

あとはAndroidやiOSなどのクライアント側の作業のみ。細かいところは端末によっても変わってくると思いますが、基本的にこれらのOSは標準でVPNクライアントソフトが入っているので、それに入力していけばOK。ホスト名(上記のurl)、仮想ハブのユーザー名とパスワード、IPsecの共有鍵あたりをごにょごにょと入力すれば特に苦もなくつながると思います。

これでようやっとVPNの設定が完了しました!! やってみるとわかりますが、外からでも自宅のハードディスクに触れるようになるというのはちょっと感動しますねw まだそこまで有効活用しきれていないところはありますが、これでできることはだいぶ広がったんじゃないかと思います。また、今回の設定を通してネットワーク系の知識はだいぶ増えたと思います。もちろん、組織のインフラエンジニアをやるためにはもうちょっとしっかりしたセキュリティ等の勉強が必要と思いますが、別にインフラエンジニアになりたいわけではないので良いでしょうw


まとめ

今回はSoftether VPNをつかったリモートネットワーク環境の構築について、グローバルIPアドレスの設定やモバイル端末からの接続法について書きました。今回で三回にわたるVPNのシリーズも最終回になります。ネットワーク素人にとってはハードルが高い部分も多々有りましたが、なんだかんだで無事に使えるようになって何よりです。

今回のハマりポイントはLinuxの仕様上の制約によって、サーバーマシンに接続できなかったところですね。ここには書いていませんが、一時期はサーバーマシンにもVirtualboxを入れて、softether VPN自体を仮想マシン上で入らせるとかも試したりしてました。まあ、サーバーマシンのCPUパワーとメモリが弱すぎてVirtualboxが動かなったわけですがねw なんにしても、こうして色々と試行錯誤するのは楽しいし、その分、上手く言った時の達成感はひとしおですね。

とりあえず、今回でネットワーク関係はだいたい書ききったので、次からはプログラミングやDIYについて書いていく予定です。

それでは、また!


この記事が気に入ったらサポートをしてみませんか?