自宅サーバーを建てよう
知り合いから1000円で売ってもらったCeleron積んでる謎のファンレスPCがあるので、いい加減活用したい。
外からアクセスできて、大公開するポートは1つにしたいね → VPN+etc…
とりあえずwireguardとsambaを入れて、wireguardを介したアクセス以外で見えないようにする。
wireguardを入れる前に
サーバーを建てるということは、当然外部からの疎通を考えないといけない。
しかしながら家の環境はmap-e方式の接続であり、いつものように開けゴマとルーターに設定を書くだけではポートが開いてくれない。ついでに言えばwireguardはUDPを使用するため疎通確認がだるい。
map-e最高だ!
謎のサイトをつかってmap-eで家に割り当てられているポート番号を調べる。
そして、NTTのモデム設定画面(192.168.11.1)から静的NAT設定を開いて公開対象のポートを開けゴマしたいがそもそも設定欄がない。
biglobeのIPv6オプションを使うと裏設定画面の方に移動するらしい
192.168.11.1:8888/t/ に裏設定画面があるのでこっちで設定する。
疎通チェック
TCPであればwebサーバーを適当にlistenさせればいいわけなのだが、wireguardはUDPを使うらしいので疎通チェックが面倒な感じ。
と思っていたらnc
コマンドを使うことで簡単に疎通チェックできるらしい
サーバー側でnc -lu 50000
のように入力することで簡易的なサーバーを建てる事ができる。
(-l
でListen -u
でUDPポートの指定)
適当に別IPのクライアントを用意してnc -u <target addr> <target port>
のように入力すると対象に文字列を送信できる。(なんも出てこないけどInteractiveなので適当に文字打ってEnter)
いい感じにポートが開いてる事がわかるのでwireguardを建てる。
wireguard導入
Dockerに載せる
とりあえずdockerに乗っけておく。(環境が壊れづらいってのもある)
適当な場所にDocker周りをまとめる
|
|
デフォルトではこのようになっているので、環境に合わせて適応変更する。
筆者の環境ではTZ(タイムゾーン), SERVERURL, PEERS, volumesのconfig部分, portsの部分を変更した。
タイムゾーンは当然日本なのでTZ=Asia/Tokyo
のように変更する。
SERVERURLはドメインを指定しなければ生IPで接続用のQRコードが生成されるようなので空に。
PEERSは数値を入力すると接続用のキーペアが数値分だけ生成され、これを端末ごとに使用する。数値ではなく、PEERに名前を付ける事もできる。その場合、PEERS=peer1, peer2, peer3
のようにカンマで区切って名前を指定することで、名前別にpeer情報が生成されるため管理が容易になる利点がある。
volumesには2行あり、設定情報をLocalに保存するために必要なconfigフォルダの配置のみ書き換える。
/path/to/appdata/config:/config
→ /home/user/wireguard/config:/config
のように変更した。
portsは51820を開放できる環境であれば問題ないが、筆者の環境では別のポートを使用しているためここも変更する。
dockerではWAN側ポート:コンテナ側ポート/TCPorUDP
のように指定する。クライアント側に見えるポートはWAN側のポートなのでここだけ変更すれば良い。
誰か教えて
Pixel4aからはきちんと接続できて自宅ネットワークが見えるのだが、Macbookの方はなぜか繋がったり繋がらなかったりする。なんで? おそらく自宅のルーターがヘアピンNATに対応していないことが原因。研究室から接続試行したら繋がりました。