学校のWi-Fiなどでフィルタリングを回避するもう一つの手段(Windowsのみ)
この記事はあくまで手段として提示するだけであり、フィルタリングを強要、または勧める記事ではありません。
試したり実際に使用する場合は自己責任でお願いします。
また、全ての環境で必ず回避できるという証拠はありませんのでできればラッキー程度に思ってください。
まず、私の学校のWi-Fi環境について説明します
専用のproxy(http)が用意されており、そのproxyを通さないとネットに接続できない
そのproxyはhttp/https/websocket以外の接続が不可
ドメインフィルタリングはブラックリスト形式
このような環境ですが、色々調べて完全に回避する方法があったのでここでお教えします。
また、別途ルート環境があるサーバーとドメインが必要です
サーバーとドメインを紐付ける (どんな方法でもwebsocketが接続できる状態であればok)
サーバーにalgovpnをインストール
https://github.com/Doridian/wsvpn をサーバーとクライアントどちらにもアーキテクチャにあったものをダウンロードする
一度サーバーでwsvpnをサーバーモードで起動
htpasswdを生成
server.ymlが生成されるため
tunnel:
mtu: 1500
subnet: 192.168.30.1/24
mode: TUN
...
server:
listen: "127.0.0.1:80" # ドメインの設定により変える (Aならおそらく0.0.0.0:80)
enable-http3: false
authenticator:
type: "htpasswd"
config: "/root/.htpasswd"
のように設定する
(subnetの欄は接続するWi-FiのIPv4と被らないIPにする)
もう一度nohupやtmuxなど(バックグラウンド維持)でサーバーモードとして起動する
クライアント側も同じ手順を踏む
client.ymlに
tunnel:
mtu: 1500
subnet: 192.168.30.1/24
mode: TUN
...
とhtpasswdを紐付ける
2024/10/22 追記
tunnel:
set-default-gateway: true
を設定する必要があります
クライアント側でも起動する、このとき必ず管理者で実行 (ここで数時間つまりました)
クライアントにWireSockUIを入れる
algovpnを正常にインストールできていればalgo/configs/<algovpnのセットアップ時に入れたexit ip>/wireguard/*.confがあるので、それのどれかをクライアントに移してWireSockUIでインポート
インポートしたらconfigを編集できるので一番下にDisallowedApps = "wsvpn-windows-amd64.exe"を追加してください。
configを保存して、activateを押し、vpnを有効化
これでtcp/udpなども全部使える完全なネットワークになると思います。
みなさんも試してみてください。
なぜ回避できるのかについて
理由は大まかに2つです
ドメインフィルタリングがブラックリスト形式なこと
websocketが使えること
1つ目の理由のドメインフィルタリングに関してですが、まず僕の学校のproxyは直ip接続ができませんでした。(おそらくブロックされてる)
で、ドメインが必要だったので自分のドメインを使用しましたが、ブラックリスト形式というのは指定したドメインのみをブロックします。なので僕のドメインは有名ではないのでブロックされていないと言うわけです。
じゃあホワイトリスト形式ならいいのかと言うとそうでもありません。なぜなら管理者がいちいち確認して追加する必要があるためかなり面倒なことになります。
なのでブラックリストのほうが現実的ですが、学校によってはホワイトリストのとこもあるみたいです。
2つ目の理由のwebsocketというのは相互通信できるプロトコルの名前です。
文字列だけでなく、いわゆるバイナリと呼ばれるデータのバイト列をそのまま送ることもできます。(まあ文字列だけしか送れなくてもbase64などに変換すればいけます)
pcに対してvpnとしてつけて送られた情報をwebsocketでバイナリとして送っています
もちろん相互通信可能なプロトコルですので返ってきたデータをvpnのネットワークアダプターに送ればそれで相互通信ができるというわけです。