commmon-netwrok
uto
uto

CentOS8にShadowSocks libevを構築する

2020年10月9日

type: entry-hyperlink id: 6dMhylbALrKd9UqQKq0SDRbackground

CentOS8にShadowSocks libevを構築したのでその構築方法を健忘録として書いていこうと思います。 また、今回は最終的にSoftetherVPNとの共存環境にしたので別記事でまとめようと思います。

About ShadowSockslibev

そんなの知ってるよ!!という方は読み飛ばして下さい。

ShadowSocks libevとはShadowSocksの派生版で、ShadowSocksをより高機能にしたものです。 特徴として外部拡張を行うことができるようになっています。

じゃあShadowSocksってなんなのって話ですが、ザックリ言うとSOCKS5プロキシです。 厳密に言うとVPNではないですが、VPNと同じように通信の暗号化やリージョン変更(IPアドレスの偽装)等を行うことができます。例えば、ポート制限されていて利用できるネットワークが限られたLAN内からポート制限を回避して通信をすることができます。

C言語で書かれているため動作が軽いらしいですが体感できませんでした。複数人での利用であれば差が出るかもしれないですね。

現在github上で更新が活発なのはShadowSocks libevなので、中国で利用すること前提であればShadowSocks libevの方が対応が早いかもしれないです。

正直ShadowSocks Rの方が構築が簡単なので必要な機能がなければ無理にShadowSocks libevで構築する必要はないかもしれません。

setUp CentOS8

今回は設定を全てrootユーザーで行なっているので、構築が終わったらssh周り、root周りの設定を行ってください。また、rootユーザーでない場合はコマンドの先頭に”sudo”を入れてください。

まずはサーバーを更新します。

dnf -y update

次にSELinuxを無効化します。

#SELinuxの設定を開くvi /etc/selinux/config

以下がconfigの中身です。

# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing//←ここを"disabled"に変更 # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection.SELINUXTYPE=targeted

SetUp shadowsocks libev

ShadowSocks libevのインストール方法はSnapを利用する方法と、自分でビルドする方法があります。 今回は推奨されているSnapを利用してインストールします。

snapは最近名前を聞くようになったパッケージマネージャーです。今回初めて利用したのであまりイメージが湧いていないですが、macのHomebrewに近いと思っています。

#snapのインストール一式
dnf install epel-release snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
snap install core

Snapを利用してshadowsocks libevをインストールします。 以下のコマンドでインストールできます。

snap install shadowsocks-libev

インストールされた状態だと設定ファイルが存在しないため作成します。 以下のコマンドで作成します。

vi /snap/bin/config.json

設定ファイルの中身は以下になります。

{
   "server":["[::0]", "127.0.0.1"],
   "mode":"tcp_and_udp",
   "server_port":443,
   "password":"password",
   "timeout":60,
   "method":"chacha20-ietf-poly1305",
   "nameserver":"1.1.1.1",
   "reuse_port": true,
   "no_delay": true,
   "fast_open": true,
   "ipv6_first": true
}

変更が必要な項目は、”password”の中身です。任意のパスワードを入力して下さい。 “method”は暗号化の方式です。必要であれば変更して下さい。

最後にShadowSocks libevの自動起動を設定します。 以下のコマンドでサービスを追加して下さい。

vi /lib/systemd/system/ss.service

サービスの中身は以下になります。

[Unit]
Description=Shadowsocks 
ServerAfter=network.target
[Service]
Restart=on-abnormal
ExecStart=/snap/bin/shadowsocks-libev.ss-server -c /snap/bin/config.json > /dev/null 2>&1
[Install]
WantedBy=multi-user.target

以下のコマンドで自動起動を登録、有効にして下さい。

systemctl daemon-reloadsystemctl enable ss.service

SetUp firewall

最後にクライアントからアクセス出来るようにファイアーウォールの設定を行います。

おそらく解放されてると思いますが、以下のコマンドでtcp443ポートを解放して下さい。

firewall-cmd --zone=public --add-port=443/tcp --permanentf
irewall-cmd --reloadfirewall-cmd --list-all

tcp443ポートの解放が確認できればファイアーウォールの設定は完了です。

最後に以下のコマンドでShadowSocksを起動します。

systemctl start ss.service

クライアントから接続できれば設定完了です。

Appendix

BBRを利用してTCPを高速化することが可能です。 よければ参考にしてください。

type: entry-hyperlink id: 77HjlaRPSKcOSF2XMhz9bG

SoftetherとShadowSocksの共存サーバー構築を記事にしました。 よければ下記からご覧ください。

Related articles