いま私が自宅で使用しているプロバイダーは、マンションタイプです。
んで、グローバル IP アドレスをくれないというクソ仕様です。

実は半年くらい前に引っ越したのですが、引っ越す前は普通にグローバル IP アドレスをもらえるプロバイダだったので、FTP やら VPN やらを外に出してたんですね。
それができなくなったことで、もう不便で不便で……w

そこで、ファイル転送だけは何とかしようと、ファイル転送ゲートウェイ的なプログラムを組んでみようかな、なんて思いました。

ゲートウェイ ソフトウェア開発計画

無理。 プロジェクトの規模が大きすぎて諦めましたw

んじゃー、一体どんな方法があるのか……と考え抜いたところ、VPN があるじゃない、と思い付きました。
VPN サーバーを外の VPS かなんかに立てて、ウチ側ゲートウェイをそこに繋ぎっぱなしにすればいい、と。

VPS の選定

VPS は、さくらにしました。
石狩にデータセンターがあることが決め手となりました。 ←北海道出身

インストールと設定

CentOSで自宅サーバー構築 – VPNサーバー構築(OpenVPN)を参考にしました。

(4)証明書廃止リスト作成 までの間で、記載の内容と違う部分

・easy-rsa がいない
Blog on fuketch.net – OpenVPNの設定(その1:認証用ファイルの生成)
>OpenVPN 2.3からeasy-rsaが同梱されていないので別途ダウンロード。

ので、上記のページを参考にダウンロード、およびコピーします。

・whichopensslcnf の修正
バージョン更新に伴い、既に修正されているのでいらないみたいです。

これに従ってできるネットワークは、以下のようになると思います。

VPN ネットワーク図

各マシンの呼称

図中にも記載していますが、各マシンは以下のように呼ぶこととします。

・VPS に構築した VPN サーバー
ext-gateway
・自宅側の VPN クライアント
int-gateway
・外出先ネットワークの VPN クライアント
mobile
・自宅ネットワーク内のファイル サーバー
file-server

IP アドレスの固定

int-gateway の IP アドレスは、固定にしたいです。
というのも、ほかのクライアントが向く先になるからです。
そのためには、以下の設定をします。
なお、証明書は int-gateway という名前で作成したものとします。

[ext-gateway] /etc/openvpn/server.conf


client-config-dir ccd

コメントアウトを解除します。

[ext-gateway] ccd ディレクトリの作成


# mkdir /etc/openvpn/ccd

[ext-gateway] /etc/openvpn/ccd/int-gateway (新規)


ifconfig-push 10.8.0.5 10.8.0.6

ルーティング等の設定

このネットワークでのパケットの往復のイメージを示します。

VPN ルーティング図

まずは往路です。 青い線と番号で記された経路です。
① 192.168.0.0/24 宛のパケットは、10.8.0.5 に送る
② クライアント間の通信を許可する
③ 10.8.0.5 と 192.168.0.50 の間は、パケットを転送する
④ 192.168.0.5 にパケットが到着する

次に復路です。 赤い線と番号で記された経路です。
これに大ハマりしました。
⑤ 10.8.0.zzz は、192.168.0.0/24 外であるので、デフォルト ゲートウェイに送る
⑥ デフォルト ゲートウェイは、10.8.0.0/24 のパケットを 192.168.0.50 に転送する
⑦ 10.8.0.5 と 192.168.0.50 の間は、パケットを転送する (③ と同じ)
⑧ クライアント間の通信を許可してあるので、10.8.0.zzz にパケットが到着する

それでは、設定方法です。

① 経路情報を追加する
VPN クライアントに対して、経路情報を追加するよう設定します。

[ext-gateway] /etc/openvpn/ccd/int-gateway


iroute 192.168.0.0 255.255.255.0

[ext-gateway] /etc/openvpn/server.conf


route 192.168.0.0 255.255.255.0

②、⑧ クライアント間通信を許可する

[ext-gateway] /etc/openvpn/server.conf


client-to-client

コメントアウトを解除します。

③、⑦ ルーティングする

参考にしたサイトでは、VPN サーバーがルーティングを担っていますが、今回の環境では、int-gateway がルーティングすることになります。
int-gateway のルーティングの設定は以下のようになります。

[int-gateway] /etc/rc.d/rc.local に以下を追記 (どこでもよい)


echo 1 >/proc/sys/net/ipv4/ip_forward

[int-gateway] /etc/sysconfig/network


NETWORKING=yes
HOSTNAME=int-gateway
FORWARD_IPV4=yes
GATEWAY=
GATEWAYDEV=

[int-gateway] /etc/sysctl.conf


net.ipv4.ip_forward = 0

ここまで設定したら、一度再起動します。

⑥ 静的ルーティング

192.168.0.0/24 のネットワークに属する file-server は、10.8.0.zzz から受け取ったパケットをデフォルト ゲートウェイに返します。
なので、デフォルト ゲートウェイが 10.8.0.0/24 を返す先として、192.168.0.50 とするよう静的ルーティングを設定してあげます。

静的ルーティング

なお、静的ルーティングを設定できないルーターを使用している方は、以下の方法もあります。

IP マスカレード

この、masquerade と書かれている部分でポート番号と IP アドレスを変換しています。
うまいこと変換してもらえたので、file-server は 192.168.0.50 にパケットを返せばいいことになります。
その設定は以下の通りに int-gateway で設定します。


# iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE

ファイアウォールについて

ext-gateway の iptables は


# iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEP

だけでおk

int-gateway の iptables は、全解除。


# iptables -A INPUT -P ACCEPT
# iptables -A FORWARD -P ACCEPT
# iptables -A OUTPUT -P ACCEPT
# iptables -F

内側のサーバーの eth0 はインターネットからアクセスできず、また、都合上外側に向いている tun0 は証明書なしでの接続ができないため、利便性を考慮し、全スルーとします。
不安な方は、絞ってもよいかと。

ざっくぅぬいぐるみ

ざっくぅ。
船橋のゲーセンにて、UFO キャッチャーで 200 円でゲット。

コイツ、数年前に大阪に旅行に行ったときに見た、ラッピング バスが初見でした。
最近、いたるところで見るようになったように感じるのは私だけでしょうか?

ざっくぅラッピング バス

ふと、Piskesoft が Google で検索されたらどうなるんだろう? って気になりました。
そこで、「Piskesoft」をキーワードに Google 検索をしてみました。

piskesoft-search

おー。 コンテンツ一覧ができてるー。
なんかちょっと嬉しいですw

少し下に進むと、画像検索も出てきました。

piskesoft-image-search

画像の順序としては、なんとなく順当な気がします。
(旧だけど)トップ絵、アプリケーションの説明、最近の日記、……。

詳細を開いてみます。

piskesoft-image-search-detail-1

あー。タブも画像検索の対象になっていたのね。
まぁ、img タグで実現していたので、仕方がないですw

さらに下に行くと……。

piskesoft-image-search-detail-2

ちょwww
こんなんクロールしないでください、Google さんwww

Web サイトをリニューアルしました。
こんな大幅なリニューアルっていつぶりでしょう。

っていうか、デザインとか考えて、php とかコーディングしてとか、超めんどかったんで、ブログ風にしてみました。
ブログ ツールは wordpress です。 わかる人にはバレバレでしょうけどw

トップにも書きましたが、更新が年単位とかザラなんで、今後もごゆるりとお付き合いください。

過去の日記はこちらから見ることができます。
主に、自分の懐古用に残してありますw
サイトのデザインも過去のままなので、Piskesoft web の昔の姿を一部見ることができます。

2001年10月6日~2004年4月30日
2004年5月1日~2004年12月31日
2005年1月1日~2012年6月3日