以前、poptop を使って pptp ができるようにしたが、proxyを通せなかったのであまり使いどころがなかった。
今回、openvpnと言うものがあることを知り、こいつは http の proxy を超えるらしいので、インストールしてみた。
いつものように、portsから security/openvpn をインストール。パスワードをファイルに保存する?みたいなことを聞いてくるので、Noを選ぶ。(と、言うか、チェックしない)
インストールされると、設定ファイルのサンプル等が /usr/local/share/doc/openvpn に入る。設定ファイルの場所は /usr/local/etc/openvpn がデフォルトらしいけど、ディレクトリすら作られない。
早速、/usr/local/etc/openvpn ディレクトリを作り、/usr/local/share/doc/openvpn/server.conf を openvpn.conf と言う名前でコピーする。
後は、中身を編集していくのだが、openvpnのモードには大きくわけてトンネルモード(TCP/IPレベルのVPN)とブリッジモード(EtherレベルのVPN)があるらしい。
外からうちに繋ぐのであれば、ブリッジの方が幸せになれそうなのでそうする。
ブリッジで動作させるためには、tapデバイスと、ブリッジの設定が必要。まずは、以下のコマンドでカーネルモジュールをロードしておく。
いろんなサイトで説明しているから、ここでは詳しく説明しない。もともとうちの場合は、webサーバ用にCAの鍵と証明書はあったので、新しくvpnサーバ用の鍵を作成し、CAで署名する。
vpnサーバが動くのに必要な鍵関係のファイルは以下。(ファイル名はなんでも良い)
これらのファイルが揃ったら、/usr/local/etc/openvpnに置き、openvpn.confファイルを編集する。
クライアントは、別の外部のネットワークにあるWindowsマシンにした。GUI版をインストーラから入れて、設定ファイルを編集する。
proxy越しでもうまく接続され、IPアドレスが割り当てられる。
んが、肝心の通信ができないのでござりますよ。
pingも通らない、tracerouteもうまく行かない。ブリッジの設定が悪いのかな~と思いつつ、おいらの知識では解決できなかった。
ブリッジモードが駄目ならトンネルモードを試してみようということで、設定ファイルの以下を変える。
クライアント側もdev tap をdev tun に変えて、試して見る。
・・・_| ̄|○
やっぱり、接続できてIPまでは振られるけど、通信ができません。こちらの場合はサブネットが変わるので、ipfの設定がいるのかも知れないけど、くじけたので今日はここまで。
このくらい書いておけば、誰か親切な人が何か教えてくれるかも知れないし(笑)
今回、openvpnと言うものがあることを知り、こいつは http の proxy を超えるらしいので、インストールしてみた。
いつものように、portsから security/openvpn をインストール。パスワードをファイルに保存する?みたいなことを聞いてくるので、Noを選ぶ。(と、言うか、チェックしない)
インストールされると、設定ファイルのサンプル等が /usr/local/share/doc/openvpn に入る。設定ファイルの場所は /usr/local/etc/openvpn がデフォルトらしいけど、ディレクトリすら作られない。
早速、/usr/local/etc/openvpn ディレクトリを作り、/usr/local/share/doc/openvpn/server.conf を openvpn.conf と言う名前でコピーする。
後は、中身を編集していくのだが、openvpnのモードには大きくわけてトンネルモード(TCP/IPレベルのVPN)とブリッジモード(EtherレベルのVPN)があるらしい。
外からうちに繋ぐのであれば、ブリッジの方が幸せになれそうなのでそうする。
ブリッジで動作させるためには、tapデバイスと、ブリッジの設定が必要。まずは、以下のコマンドでカーネルモジュールをロードしておく。
# kldload if_tap # kldload bridgebridgeを有効にするために、以下を実行する。(rl0がブリッジしたい内部向けのインターフェイスで、tap0がvpnが使うインターフェイス)
# sysctl -w net.link.ether.bridge.config="rl0 tap0" # sysctl -w net.link.ether.bridge.enable=1続いて、必要なキーファイルと証明書を作る。
いろんなサイトで説明しているから、ここでは詳しく説明しない。もともとうちの場合は、webサーバ用にCAの鍵と証明書はあったので、新しくvpnサーバ用の鍵を作成し、CAで署名する。
vpnサーバが動くのに必要な鍵関係のファイルは以下。(ファイル名はなんでも良い)
ファイル名 | 説明 |
---|---|
ca.crt | CAの証明書 |
server.crt | VPNサーバの証明書 |
server.crt | VPNサーバの鍵(rootしか読めないようにしておく) |
dh1024.pem | DHパラメータ |
# vpnがListenするアドレス。うちの場合外部のIP local 210.254.71.72 # vpn がListenするポート port 1194 # vpnが使うプロトコル。proxyを使いたい場合はtcpを選ぶ proto tcp # bridgeの場合はtapを選ぶ dev tap0 # 鍵関係 ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem # ブリッジの設定(ブリッジのIPが192.168.0.1で、クライアントには 201~210を割り当てる) server-bridge 192.168.0.1 255.255.255.0 192.168.0.201 192.168.0.210 # クライアントに送るルーティング情報 push "route 192.168.0.0 255.255.255.0" # この辺はデフォルト keepalive 10 120 comp-lzo # vpnサーバを nobodyで動かす user nobody group nobody # この辺もデフォルト persist-key persist-tun # ログの設定 status /var/log/openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log verb 3後は、/etc/rc.confに以下を追加。
openvpn_enable="YES"/usr/local/etc/rc.d/openvpn start でvpn起動。
クライアントは、別の外部のネットワークにあるWindowsマシンにした。GUI版をインストーラから入れて、設定ファイルを編集する。
client proto tcp dev tap0 # 接続するサーバ remote 210.254.71.72 1194 ca ca.crt cert client.crt key client.key resolv-retry infinite nobind comp-lzo persist-key persist-tun verb 3 pull floatそうそう、クライアントの鍵を作ってCAで証明書を作り、それらとCAの証明書をクライアントに入れておく。 後は、タスクトレイのアイコンを右クリックして、Connectなんてやれば接続される。
proxy越しでもうまく接続され、IPアドレスが割り当てられる。
んが、肝心の通信ができないのでござりますよ。
pingも通らない、tracerouteもうまく行かない。ブリッジの設定が悪いのかな~と思いつつ、おいらの知識では解決できなかった。
ブリッジモードが駄目ならトンネルモードを試してみようということで、設定ファイルの以下を変える。
# dev tap0 dev tun2 # server-bridge 192.168.0.1 255.255.255.0 192.168.0.201 192.168.0.210 server 192.168.22.0 255.255.255.0tun2になっているのは、うちのpppでtun0とtun1を使っているから。
クライアント側もdev tap をdev tun に変えて、試して見る。
・・・_| ̄|○
やっぱり、接続できてIPまでは振られるけど、通信ができません。こちらの場合はサブネットが変わるので、ipfの設定がいるのかも知れないけど、くじけたので今日はここまで。
このくらい書いておけば、誰か親切な人が何か教えてくれるかも知れないし(笑)
もちっとだけ調べて見ました。
上に書いたbridgeは古いらしく、最近は bridge ではなく if_bridgeを使うようです。
if_bridgeのマニュアルをつらつら読んだところ、rc.confを以下のような感じにしてやると、良さそうな感じです。(面倒なので、再起動してません。ので、動作確認してません)
それから、bridgeのパラメータをちょっといじります。/etc/sysctl.confに以下を追加
ここまでやって、vpnで接続した後、サーバからクライアントにpingを打つとサーバとクライアントの間でだけ通信ができるようになりました。
何故か、一度でもサーバからpingを打つまでは通信ができません。
後は、クライアントと家庭内LANの間の通信もできないようです。む~、先は長いなあ・・・。
上に書いたbridgeは古いらしく、最近は bridge ではなく if_bridgeを使うようです。
# kldload if_bridgeんで、/etc/rc.d/bridgeとか言うものがあるので、/etc/rc.conf に autobridge_interfaceとかautobridge_bridge0 とかごにょごにょすると行けそうな感じです。とりあえず、直接コマンドラインから、
# ifconfig bridge0 create # ifconfig bridge0 addm rl0 addm tap0なんてやると、bridgeが作れるみたいです。
if_bridgeのマニュアルをつらつら読んだところ、rc.confを以下のような感じにしてやると、良さそうな感じです。(面倒なので、再起動してません。ので、動作確認してません)
network_interfaces="rl0 lo0 tap0" ifconfig_tap0="up" cloned_interfaces="bridge0" autobridge_interfaces="bridge0" autobridge_bridge0="rl0 tap0" openvpn_enable="YES"動作確認していなくて不安なのは、tap0を入れる位置が network_interfacesで良いかどうかです。次に停電とかあって再起動したら確認しますので報告します。
それから、bridgeのパラメータをちょっといじります。/etc/sysctl.confに以下を追加
net.link.bridge.pfil_onlyip=0あ、後はカーネルモジュールをロードしないといけないので、/boot/loader.confに以下を追加します。
if_tap_load="YES" if_bridge_load="YES"ひょっとしたら、書かなくてもrcが勝手にやってくれるかも知れないですが、一応。
ここまでやって、vpnで接続した後、サーバからクライアントにpingを打つとサーバとクライアントの間でだけ通信ができるようになりました。
何故か、一度でもサーバからpingを打つまでは通信ができません。
後は、クライアントと家庭内LANの間の通信もできないようです。む~、先は長いなあ・・・。
カテゴリ
Networkトラックバック(1)
このブログ記事を参照しているブログ一覧: openvpn
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1071
» openvpn(その2)(PC日記)~のトラックバック
FreeBSDでopenvpnその2 なんとか、通信できる方法は見つかったけど、まだまだ問題あり 続きを読む
コメントする