shadowsocks-libev

Arch Linuxは軽快で好きなのだが、意外に標準でパッケージがない。shadowsocksのインストールは簡単だが、obfsを使えない。shadowsocksRは標準パッケージがない。
libev+simple-obfsに挑戦。

# pacman -S shadowsocks-libev simple-obfs

サービスファイルを作成
# cat > /etc/systemd/system/shadowsocks-libev.service
[Unit]
Description=Shadowsocks-libev Default Server Service
Documentation=man:shadowsocks-libev(8)
After=network.target
[Service]
Type=simpleEnvironment
File=/etc/sysconfig/shadowsocks-libev
User=nobody
Group=nobody
LimitNOFILE=32768
ExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

設定ファイルを作成
# mkdir /etc/shadowsocks
# cat > /etc/shadowsocks-libev/config.json
{
“server”:”0.0.0.0″,
“server_port”:8388,
“local_port”:1080,
“password”:”passpass”,
“timeout”:300,
“method”:”chacha20-ietf”,
“plugin”: “obfs-server”,
“plugin_opts”: “obfs=tls”
}

サービスファイルを修正したら、リロード
# systemctl daemon-reload
# systemctl start shadowsocks-libev
# systemctl enable shadowsocks-libev

アンドロイドのクライアントをインストール
Shadowsocks offered by Max Lv
Simple Obfuscation offered by Max Lv
Android 10だと、Close allで終了してしまうので、バックグラウンド処理を可にする。

linuxのクライアントでは、ss-localがsocks5 proxyとなる。
# ss-local -c config.json -v
設定は、サーバーとほぼ同じでよいが、”plugin”: “obfs-local”とプラグインを変える。
seamonkeyのEdit/Preference/Advances/Proxies/を開き、
Manual poxy configurationを選び、Advancedを開き、
Socks Proxy: localhost, Port: 1080を入力し、
Socks v5とUse for resolving hostnameを選ぶ。

ssh over shadowsocksの場合は、ss-tunnelを使ってポートフォワード。
# ss-tunnel -c config.josn -v -L server.com:22
# ssh -p 1080 user@localhost
複数のサーバと接続するとサーバ情報が一致しないのでエラーとなり接続できない。~/.ssh/known_hostsの該当するサーバを削除するか、ssh -o ‘StrictHostKeyChecking no’で接続する。
ブラウザとsshだけならこれでよいが、本格的に使うなら、ss-redirとiptablesで設定が必要。

Winodwsのクライアントでは、プラグインのobfs-local.exeを同じをShadowsocksと同じフォルダにおけばよいが、Windows用のbinaryはv0.05で更新が止まっている。暗号はchacha20-ietf-poly1305を認識しないので、aes-256-gcmを使うしかない。
https://github.com/shadowsocks/simple-obfs
こちらのバージョン(20191220)は、より新しくchacha20-ietf-poly1305も認識できる。
https://github.com/imgk/simple-obfs-Cygwin/releases
ブラウザはproxy設定されるので問題ないが、システムのルートが変わるわけではないので、Rloginが使えない。サーバの設定、プロキシ設定を開き、Socks5を選択して、localhost, localportを入力すれば、Shadowsocks経由でSSHが使える。

ubuntu 20.04でもインストール。
# apt install shadowsocks-libev simple-obfs
# cd /etc/shadowsocks-libev
# cp config-obfs.json config.json
# vi config.json
“server”は、”127.0.0.1″ではなく、”0.0.0.0”
# systemctl restart shadowsocks-libev
実行すると、下記のメッセージが出力されて、どうも動いていない。
This system doesn’t provide enough entropy to quickly generate high-quality random numbers.
Installing the rng-utils/rng-tools, jitterentropy or haveged packages may help.
On virtualized Linux environments, also consider using virtio-rng.
The service will not start until enough entropy has been collected.
エントロピーを見ると100前後しかない。
# cat /proc/sys/kernel/random/entropy_avail
entropybrokerで少し増え、havegedで1000前後、rng-toolsで3000前後に増える。
# apt install rng-tools
installするだけでdaemonが起動している。
GFWについて下記の記事を信じて、パスワードは乱数に変えた。バイト数は3の倍数でないと’=’が追加されるので無駄。
# openssl rand -base64 18
https://gfw.report/blog/ss_tutorial/en/

obfescationのプラグインを使わなくても、速度は遅くなるが接続できる。

コメント