2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

不自由なネットワークから脱出する(shadowsocks)

Last updated at Posted at 2025-06-16

はじめに

学校等で不自由なネットワークから,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

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

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というソフトウェアが使えそうです。

おわりに

いい通信ライフを!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?