2023年3月12日日曜日

DD-WRTでOpenVPNを設定してみた

 DD-WRT化していたルータの調子が悪かったので再起動したら立ち上がらなくなってしまって、結局いろいろ試した結果どうやらNANDフラッシュに不良セクタがあって設定保存してもNVRAMをクリアしないと起動しなくなってしまったので買い替えた。

もともとWZR-1166DHPを使っていたんだけど、DD-WRT対応のルータで最近のやつはむしろRAMが少なかったりするので結局中古で上位モデルのWZR-1750DHP2を購入してみた。1000円ぐらいで買えたのでつなぎとして使って、新品の良さげなやつ探そうかなとか。DD-WRTじゃなくてMarlinでもいいかなとか思ったり。

それはさておき、まずはWZR-1750DHP2のDD-WRT化。
ファームウェアをv2.25に更新してデバッグモードでログオンしてbuffalo-wzr-1750dhp-webflash.binのv3.0-r51887を書き込んでみた。WZR-1750DHP用のファームウェアだけどWZR-1750DHP2でも問題なく動くっぽい。

WZR-1166DHPのときの設定に色々書き換えていたんだけど、どうもSoftether VPNのL2TPだけうまくつながらない。Softether VPNの方はつながるんだけどね…
iOSから使いたかったので前はL2TPの設定をしていたんだけど。

ということでSoftether VPNの設定は諦めてOpenVPNを使ってみることに。一応こっちもiOS対応のアプリから設定すればiOSからVPNが利用できるらしい。

ServicesのVPNタブを開いてOpenVPN ServerのEnable ServerをEnableにするとOpenVPNの設定が開く。iOSだとServer ModeのTAPが対応していないっぽいのでTUNを使用した。

とりあえずこんな感じに設定した。
暗号化アルゴリズムは適宜。

ここまで設定したら次はCAと秘密鍵を生成する。今回はWindowsで設定したかったのでvpnux PKI Managerを使用した。
このツールで簡単にキーが設定できた。
ディレクトリを設定したらCAの新規作成をクリック。すると1~2分でセキュリティー証明書を生成してくれる。
あとはサーバー用証明書(デフォルトでserver_1)とクライアント証明書(デフォルトでclient_1)を一つずつ作成した。名前はわかりやすいように適当に変更してもOKだと思う。クライアントはクライアント文だけ生成すればいいと思う。(上の設定でAllow Duplicate ClientsをEnableにすると一つのキーで複数のクライアントから接続できるようになる)

とりあえず証明書を生成したらDD-WRTの設定の下の方を埋めていく。
DH PEMはdh2048.pemの中身をメモ帳で開いてそのままコピペ。
CA Certificateはca.crtの中身をメモ帳で開いてそのままコピペ。
Public Server Certificateはserver_1.crtをメモ帳で開いて一番下の-----BEGIN CERTIFICATE-----から最後までをコピペ。
Private Server Keyはserver_1.keyをメモ帳で開いて一番上の-----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----までをコピペ。

Additional Configurationにはdnsmasqの設定に関連して
push "dhcp-option DNS 10.8.0.1"
を追加しておいた。

とりあえずこれでOpenVPN Server側の設定は完了なのでApply Settingしておく。
次はServicesのServicesタブでDnsmasqの設定。これをしておかないとOpenVPN接続経由でインターネットに出られない。
Additional Optionsの上の方に
listen-address=127.0.0.1
listen-address=10.8.0.1
の2行を追加してApply Setting。

あとはポート開放。NAT/QoSのPort ForwardingでOpenVPNの設定で使用したポート(デフォルトで1194のUDP)を開放する。
ルーターのIPアドレスは環境に合わせて選択。EnableにしてApply Setting。
これでルーターを再起動すればOpenVPN鯖側は設定完了。

クライアントの設定ファイルは先程のOpenVPN Serverの設定の下の方の"Export Client Configuration"ボタンを押すとダウンロードできる。
ダウンロードしたovpncl_config.ovpnをメモ帳とかで開いて
remoteの行をDDNSとかグローバルIPに書き換える。
一番下のcertとkeyのところにサーバーの設定のようにclient_1.crtの中身とclient_1.keyの中身を同じようにコピペ。
あとはCAがないと言われるので一番最後に
ca.crtの中身を同じように<ca>と</ca>の間に挟むようにしてコピペして保存する。

iPhoneから接続する場合はiClowdにアクセスしてPCからこのファイルをアップロードしてiPhoneのOpenVPNアプリから開いた。あとはアプリ側で設定ファイルを開いて接続することができた。


2 件のコメント:

  1. SoftEtherの設定の際に以下の記事に何度もお世話になっております。
    https://firtel.blogspot.com/2018/04/dd-wrt-softether-vpn-l2tp.html

    L2TP用に500と4500番(UDP)を開けましたか?L2TP接続失敗したのは過去の時と同じ原因ではないでしょうか?
    約一年前なので今更ですが・・・

    返信削除
    返信
    1. コメントありがとうございます!
      一応ポートも開けているんですが…あとはIPが割り振られていないと同じエラーが出るという問題も、Windowsとかだと問題ないはずなのですが、Windowsですら繋がらないので原因不明ですorz
      なにげにOpenVPNでも設定さえアプリで完了すればiPhoneの設定から接続をオン・オフできたりするのでL2TPとあまり変わらず使えるっぽいのでとりあえずはOpenVPNで行こうかなと思っております。

      削除