はじめに
学校等で不自由なネットワークから,firewallを貫通して自由になりたい人向けです。
弊学のfirewallはTCPの80,443しか基本的には通さないようになっています。22番ポートですが,3wayハンドシェイクは出来るが,SSHプロトコルと認識されて遮断されてしいます。
SSHできないのはおかしい!!
各プラットフォームごとに書いていきます。
メインはshadowsocks
というプロキシです。
Windows
筑波大学のsoftetherVPN
プロジェクトを使いましょう!!TCPの443ポートのサーバーを選択すれば、だいたい貫通できると思います。弊学の場合,OpenVPN
はTCPの443でもブロックされました。使うならSoftEtherVPN一択です。
サービスによっては,VPNプロジェクトは公開プロジェクトなのでIPアドレスが公開されている関係で,ブロックされることもあるようです。
https://www.vpngate.net/ja/download.aspx
Windowsしか対応していません
Windows以外
VPNを使う
OpenVPN,IPSec-VPNなど,firewallを貫通できるプロトコルを探してください。
OpenVPNの場合,TCPの443ポートを使い,tls-crypt
を有効化すると貫通できる可能性が上がります。
弊学の場合,Windows以外のクライアントではVPNが通らなかったので,VPNを諦めました。
プロキシを使う。
httpプロキシ,socks5プロキシ
httpプロキシやsocks5プロキシで貫通可能なのであれば、使いましょう。
ソフトウェアはv2ray
がおすすめです。後述のプロキシでも使える,大変便利なソフトウェアです。
ルーティングの設定が強力です。
インストール
curl -Ls https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh | sudo bash
クライアント側でも使えます!
弊学の場合,SSHは出来るようになりました。
shadowsocks(メイン)
弊学の場合,shadowsocksでほぼ自由になることができました。
ベースはsocks5で,難読化します。
中国の大規模検閲を回避するために開発されたソフトウェアなようです。
前提条件
・管理者権限のあるサーバを持っていること
・ポート開放,転送できること(443ポートが使えると良い)
・自由に使えるドメインを持っていること
筆者はVPSを借りました。
インストール
先ほどのv2rayが使えます。
素のsyadowsocksをインストールすることもできます。
sudo apt install shadowsocks-libev
設定(サーバ側)
設定ファイル
geminiに書かせちゃいましょう!(学生なら2025/6/30まで申し込めば2.5proが使えます!)
/usr/local/etc/v2ray/config.json
{
"log": {
"loglevel": "none",
"access": "YOUR_ACCESS_LOG_FILE",
"error": "YOUR_ERROR_LOG_FILE"
},
"inbounds": [
{
"listen": "YOUR_GLOBAL_IP",
"port": 443,
"protocol": "shadowsocks",
"settings": {
"method": "chacha20-ietf-poly1305",
"password": "YOUR_PASSWARD",
"udp": true
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [
{
"certificateFile": "YOUR_SERVER_CERTIFICATE",
"keyFile": "YOUR_SERVER_KEY"
}
]
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct",
"settings" :{
"udp": true
}
}
]
}
サーバー証明書はLet’s Encrypt
で取っちゃいましょう。DNSチャレンジで,ワイルドカード証明書にすることをおすすめします。いろいろなことに使えます。
firewallの設定
ufw
sudo ufw allow 443/tcp
sudo ufe reload
firewalld
firewall-cmd ----permanent --add-port=443/tcp --zone=public
firewall-cmd --reload
起動
sudo systemctl enable v2ray
sudo systemctl start v2ray
設定(クライアント側)
インストール
linux
サーバー側と同じソフトウェア
Android
https://v2rayng.2dust.link/v2rayNG_1.10.4_arm64-v8a.apk
Apple系
https://apps.apple.com/us/app/v2box-v2ray-client/id6446814690
Windows
https://v2rayn.2dust.link/v2rayN-windows-64-desktop.zip
設定ファイル
/usr/local/etc/v2ray/config.json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 10808,
"listen": "127.0.0.1",
"protocol": "socks",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
},
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "YOUR_SERVER_IP",
"port": 443,
"method": "chacha20-ietf-poly1305",
"password": "YOUR_PASSWORD"
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "YOUR_SERVER_FQDN"
}
},
"tag": "proxy"
},
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"domain": [
"geosite:category-ads-all"
],
"outboundTag": "block"
},
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "direct"
},
{
"type": "field",
"network": "tcp,udp",
"outboundTag": "proxy"
}
]
}
}
これで任意のTCP通信が出来るようになります。
UDP通信も出来るはずですが,TCPの443ポート以外のポートでリレーされて,弊学のUDP通信が遮断されている環境下はできませんでした。
AndroidやiOSクライアントはほとんどの場合,VPNモードで動作しますが,すべての通信をプロキシに通過させるために,ローカルにVPNサーバーを建てて接続しているのでVPNっぽいですが,プロキシです。
ルーティング設定の広告ブロックですが,効かないときもあります。
代替手段
すべてをTLSでカプセル化するstunnelというソフトウェアが使えそうです。
おわりに
いい通信ライフを!