OpenWrtをスイッチ化してWireGuardを入れた
この記事は、SLP KBIT AdventCalendar2021 24日目の記事です。
多くのメンバーが面白い記事を書いてくれています。ぜひどうぞ。
さて、今年のアドカレでは、最近勉強し始めたRustでシェルでも作ってみようかな、と考えていました。
しかしながら、師走というだけあり、色々と忙しくなってしまい、、できませんでした!(また今度そのうちやります)
ということで、過去に下書きとして残していた記事(というよりメモ)を整えて、今年の僕のアドカレ担当分とします。
作業用BGMに毎年恒例の薪燃え見てます。ずっと見てられる。
この記事は、「自宅のOpenWrtルーターをWireGuard用のサーバーとして使っていたが、2重ルーターになってたのとメインのルーターの物理ポートが足りなくなったのでVPNサーバ兼スイッチングハブにした」という内容です。
こんな感じになる:
使用するルーター: Buffalo WZR-HP-AG300H
OpenWrtのバージョン: OpenWrt 21.02.1
コマンドラインではなく、LuCI(Webインタフェース)を使って操作していきます。
IPv6は使用していません。
switch化
WANポートのインタフェースを消すので、OpenWrtのLANポートと操作用PCをLANケーブルで繋いで作業を行います。
事前準備として、メインルーターとOpenWrtはこの時点では繋がないでおきます。
また、パスワードの設定は済ませておきます。(設定していないと、IPアドレスが変わったときに認証されないようです)
作業場所: Network -> Interfaces
- WAN, WAN6を消す
- LANをEdit
- Networks -> Devicesタブの
br-lan
の設定でEnable IPv6
のチェックを外してIPv6無効化- br-lanのBridge portsにはeth0.1とeth1を指定
- Save & Apply
- カウントダウンが開始する。残り70sぐらいになったら設定が適用されていると思われるので、以下の操作をカウントダウン中に行う(0になれば失敗します。もう一度チャレンジしましょう)
設定が反映されインターネットに接続できていることを確認できればOK
WireGuardを入れる
- UDPを利用し、L3トンネルを実現します。
- 公開鍵を使って認証したPeer同士で通信が可能になります。
作業場所: System -> Software
- Update lists... を押してパッケージリストをアップデート
- 次のパッケージをインストールします:
luci-app-wireguard
,luci-proto-wireguard
luci-app-wireguard
を入れたらluci-proto-wireguard
も一緒に入るかも。- System -> Reboot から 再起動
- Networks -> Interfaces -> Add new interface でwireguard用のインタフェースを作成する
- インタフェース名: wg0
- protocol: WireGuardVPN
- port: 51820 (なんでもいい)
- FW: lanにしてたがなんでもいいと思う
- Peers: 以下の事項に注意しながら適当に埋める。
こんな感じになる:
作成後に設定を変えるときは、Editで編集してSave&ApplyしてインタフェースのRestartをする。
メインルータの設定
ポート変換などの機能で OpenWRTのLANインタフェースのIPのUDPポート51820に インターネットから来るUDP 51820 のトラフィックを投げるように設定する。
Client Peerの設定
クライアントにあたるPeerの設定を書く。
Windowsなら、クライアントソフトのAdd Tunel -> Add empty tunnelで作成し、Editで書いていく。
[Interface] PrivateKey = <PrivateKey> ListenPort = 51820 Address = wg0のAllowedIPs/32 DNS = <DNS> [Peer] PublicKey = <PubKey> PresharedKey = <PSK> AllowedIPs = 0.0.0.0/0 Endpoint = <dnshostname>:51820
client peerのpubkeyを先ほどのwg0インタフェースのpeerに登録する。
wgwan用トラフィックルールの作成
WGはどうもNATでないと動作しない(WANに来たトラフィックを見ている?)みたい?なので、wg0がリッスンするNATデバイスをつくってやることにする。
作業場所: Network -> Firewall
Add からゾーン(ここでは wgwan とする)を作成する。
これらのforwardingsなどの設定は、既存のwanゾーンに合わせている。
ただし、wgwanのForwardはAcceptにしている。(もしかしたらrejectでいいかもしれない)
作成したら、Traffic Rules タブに移動する。
Addからルールを作成する。
Incoming IPv4, Protocol UDP, From wgwan To this device, port 51820, Accept input
メモによると、このままだとルータに有線接続した際にipでluciにアクセスできなかったとのことで allow WAN -> device:80,443 とするルールを追加していました。
wg0用NATインタフェースの作成
作業場所: Network -> Interfaces
- Add new interface でインタフェースを作成
Phew!
以上です。
当時の記憶があまりないので色々検証できてないですが、現状動いているので多分これで動きます。
メモをみるとSwitchデバイス(eth0.1あたり)やルーティングテーブルいじったり、迷走してましたね。。。
ちなみに、固定IPはお金がかかるので、DDNS(NoIP)を登録して使っています。
(あ、日付変わってた…メリークリスマス!🎅)