こないだLinuxカーネルメインラインにWireguardのコードがマージされたってニュースが有りました。
どんなプロトコルなんだろうってちょっと調べてみたら
- コードベースが小さい
- 強度の高い暗号化アルゴリズムを使用している
- OpenSSLに依存しない(重要)
なんですって。
これは良いんじゃないですか?今後も期待できるし、今うちで使ってるDD-WRTルータのVPNを切り替えできたら最高じゃない?と思ったら、もうすでに実装済みでした。
じゃあやるしか無いでしょう!
DD-WRT側の設定
注意点は2つ。
- LAN側と重複しないアドレスをWireguardトンネル用に確保する
- 期待した通信ができない場合は「CVE-2019-14899 Mitigation」の設定を変えてみる
Administration>Commands
LAN側にトンネル経由で接続できるようにするには、Firewall定義に以下のコマンドを追加する。
iptables -t nat -I POSTROUTING -o br0 -j SNAT --to $(nvram get lan_ipaddr)
Services>Services
DnsmasqのAdditional Dnsmasq Optionsに以下の内容を設定。
これをしないとトンネル接続後に、DD-WRTのDnsmasqを使った名前解決ができない。
interface=oet1 no-dhcp-interface=oet1
Setup > Tunnels
- Tunnel:Disable → Enable
- Protocol Type:Wireguard
- Local Port:お好みで(443とかしたほうがいいのかな)
- IP Address:任意の範囲(LAN側と重複しないアドレス。例では10.0.0.1)
- Subnet Mask:任意の範囲(そんなにたくさんじゃなければ255.255.255.0で良いかな)
あと、忘れず「Generate Key」しとく。
Peer(クライアント)の登録
「Add Peer」をクリックして、クライアントの設定を1対向ずつやっていく。
- Peer Tunnel IP:先に設定した「IP Address/Subnet Mask」の範囲から割り当てる。例では10.0.0.2を設定。
- Peer Tunnel DNS:ルータ自身にDNSのリゾルバをやらせるので、先に設定したIP Addressを設定する。例では10.0.0.1を設定。
- Endpoint:Disableのまま
- Allowed IPs:Wireguard経由で通信可能な範囲。すべてのトラフィックをVPN経由にするなら「0.0.0.0/0」のままでよい どうもこれだとうまく動かないようで、再起動するとNGでした。「Peer Tunnel IP」を32ビットで指定した形式(例だと 10.0.0.2/32)にするとOKでした。
で、この状態で「QR-code」をクリックすると、設定情報が入ったQRコードが生成される。これをクライアント側のアプリで読み込ませると自動的に設定が入る。
なお、単純に設定ファイルのテキストをQRコードにしているだけなので、PCで使いたい場合はQRコードをデコードして出てきた内容をそのまま設定ファイルに書き込めばOK。
クライアント側の設定
手元にあるのがMacbookAir(macOS Catalina)、iPad Pro、Android 9.0(Galaxy S9)なのでそれぞれでやってみました。
macOS
Mac App Storeから「Wireguard」をインストールします。
起動するとまっさらな状態なので、トンネル設定を入れます。左下の「+」をクリックして「Add Empty Tunnel」をクリックします。
- Name:この設定に付ける名前です。「DD-WRT」とか適当につけます
- On-Demand:自動的にトンネルを接続させたい場合は、その接続種別にチェックを入れます。
下の部分には勝手に設定が入っていますが、前述のQRコードからデコードした設定で上書きします。設定を入れたら「Save」をクリックします。このとき、VPN設定を行う許可を求められるので「許可」します。
設定が登録されました。「Activate」ボタンをクリックするとトンネルが確立します。(切断する際は「Deactivate」をクリックします)。
接続中
iPad Pro(iOS系)
AppStoreから「Wireguard」をインストールします。
起動するとまっさらな状態なので「Add Tunnel」をタップします。
QRコードを読み込んで設定するので「Create from QR code」をタップします。
QRコードを読み込むと設定名を入れるダイアログが出るので、お好きな名前を入れます(私はHome-routerと入れました)。このあとVPN構成の追加の確認画面が表示されるので「許可」をタップします。
これで設定が追加されます。設定名をタップすると詳細な設定が確認できます。
「Active」スイッチを入れるとトンネルが確立します。
Galaxy S9(Android)
Playストアから「Wireguard」をインストールします。
起動するとまっさらな状態なので、右下の「+」をタップします。
QRコードから設定するので「Create from QR code」をタップします。
カメラが起動するのでQRコードを読み込ませます。正常に読み込むと設定名を入れるダイアログが出るので、お好きな名前を入れます(私はHome-routerと入れました)。
設定名の右のスイッチを入れるとトンネルが確立します。
まとめ
OpenVPNを使うよりもトンネル確立が速く、データ送受信も速いのでOpenVPNは使わないことにしました。設定もややこしいですしね。
コメント