Stay Hungry. Stay Foolish.

ShadowsocksR 服务端搭建

基本库安装

以下命令均以 root 用户执行,或 sudo 方式执行,教程使用系统为 Ubuntu 18.04,Ubuntu/Debian 系统安装类似,RHEL 系列系统安装略有区别。**

对于部分不支持 root 用户的服务器(如 GCP,Azure,AWS 等),可以使用普通用户登录以后执行:sudo -i 获取 root 权限。

apt update && apt full-upgrade -y && apt install sudo vim wget curl git python python-pip python-dev python3 python3-pip python3-dev build-essential libffi-dev libssl-dev -y

curl -sL https://deb.nodesource.com/setup_10.x | bash -
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt update && apt install nodejs yarn -y && yarn global add pm2
  • 如果要使用 chacha20 系列的加密方式,需要安装 libsodium

Debian

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg 
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update && apt install -y libsodium-dev

CentOS

yum install epel-release && yum update && yum install -y libsodium-devel

Ubuntu

apt install -y software-properties-common
add-apt-repository ppa:ondrej/php -y
apt update && apt install -y libsodium-dev

获取源代码

git clone -b manyuser https://github.com/shadowsocksrr/shadowsocksr.git

执行完毕后此目录会新建一个 shadowsocksr 目录,其中根目录的是多用户版(即数据库版,个人用户请忽略这个),子目录中的是我们需要的单用户版。

根目录即 ~/shadowsocksr
子目录即 ~/shadowsocksr/shadowsocks

服务端配置

初始化配置

cd ~/shadowsocksr
bash initcfg.sh
cd ~/shadowsocksr/shadowsocks

修改配置参数

vi ~/shadowsocksr/user-config.json

参考配置:

{
    "server": "0.0.0.0",
    "server_ipv6": "::",
    "server_port": 8880,
    "local_address": "127.0.0.1",
    "local_port": 1088,
    "password": "m",(修改这里,必须修改)
    "method": "aes-128-ctr",(修改这里,可以修改为 `rc4-md5-6` 或者 `chacha20-ietf`)
    "protocol": "auth_aes128_md5",
    "protocol_param": "",
    "obfs": "http_post",(不推荐修改)
    "obfs_param": "",
    "speed_limit_per_con": 0,
    "speed_limit_per_user": 0,
    "additional_ports" : {},
    "timeout": 120,
    "udp_timeout": 60,
    "dns_ipv6": false,
    "connect_verbose_info": 0,
    "redirect": "HK2SCH130021464.wns.windows.com:80",
    "fast_open": true
}

运行子目录内的server.py:

前台运行(调试用,断开后就自动关闭):
python server.py
后台运行|重启|停止:
python server.py -d [start|restart|stop]
查看日志:
tail -f /var/log/shadowsocks.log
用 -h 查看所有参数

使用 pm2 守护

  • 创建 pm2 启动脚本:
cat > /root/shadowsocksr/shadowsocks/server.json <<EOF
{
    "name": "SSR",
    "cwd": "/root/shadowsocksr/shadowsocks",
    "interpreter": "python2",
    "script": "server.py"
}
EOF
  • 管理命令:
pm2 start server.json
pm2 startup
pm2 save

魔改版服务器后端安装

  • 仅作备份不解释
echo "sshd: ALL" > /etc/hosts.allow
pip3 install pip -U && pip2 install pip -U && hash -r
pip install cryptography pyOpenSSL -U
pip install setuptools cymysql requests pyasn1 ndg-httpsclient urllib3
git clone https://github.com/S8Cloud/shadowsocks.git
cd shadowsocks
vi userapiconfig.py
  • 配置文件
# 节点ID
NODE_ID = 1
# 自动化测速,为 0 不测试,此处以小时为单位,和 ss-panel 设置的小时数一致
SPEEDTEST = 0
# 云安全,自动上报与下载封禁 IP,1 为开启,0 为关闭
CLOUDSAFE = 1
# 自动封禁SS密码和加密方式错误的 IP,1 为开启,0 为关闭
ANTISSATTACK = 0
# 是否接受上级下发的命令
AUTOEXEC = 0
MU_SUFFIX = 'dcc.cat'
# 多端口单用户设置
MU_REGEX = '%5m%id.%suffix'
SERVER_PUB_ADDR = '127.0.0.1'
# 访问面板方式,推荐 modwebapi
# glzjinmod(数据库方式连接,相对不安全),modwebapi(HTTP API 连接,对主站性能要求高,要求 HTTPS)
API_INTERFACE = 'modwebapi'
# mudb,不要管
MUDB_FILE = 'mudb.json'
# HTTP API 的相关信息。
WEBAPI_URL = 'https://dcc.cat'
WEBAPI_TOKEN = 'ssr'
# Mysql 数据库连接信息
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'ss'
MYSQL_PASS = 'ss'
MYSQL_DB = 'shadowsocks'
# 是否启用SSL连接,0为关,1为开
MYSQL_SSL_ENABLE = 0
# 客户端证书目录
MYSQL_SSL_CERT = '/root/shadowsocks/client-cert.pem'
MYSQL_SSL_KEY = '/root/shadowsocks/client-key.pem'
MYSQL_SSL_CA = '/root/shadowsocks/ca.pem'
# API,不用管
API_HOST = '127.0.0.1'
API_PORT = 80
API_PATH = '/mu/v2/'
API_TOKEN = 'abcdef'
API_UPDATE_TIME = 60
# Manager 不用管
MANAGE_PASS = 'ss233333333'
# if you want manage in other server you should set this value to global ip
MANAGE_BIND_IP = '127.0.0.1'
# make sure this port is idle
MANAGE_PORT = 23333
# 安全设置,限制在线 IP 数所需,下面这个参数随机设置,并且所有节点需要保持一致。
IP_MD5_SALT = 'randomforsafety'
  • 运行方式:
python server.py 用于调错的
./run.sh 无日志后台运行
./logrun.sh 有日志后台运行
systemd 系统服务
pm2 后台守护
  • systemd 系统服务
vi /etc/systemd/system/ssr.service

systemd 配置为:

[Unit]
Description=ssr deamon
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root/shadowsocks
ExecStart=/usr/bin/python2 server.py
Restart=always
LimitNOFILE=1024000
[Install]
WantedBy=multi-user.target

管理命令:

systemctl enable ssr
systemctl start ssr
  • PM2 后台守护

server.json 内容为:

{
    "name": "SSR",
    "cwd": "/root/shadowsocks",
    "interpreter": "python2",
    "script": "server.py"
}

管理命令:

pm2 start server.json
pm2 startup 
pm2 save

OCServ 服务端搭建

OCServ(OpenConnect Server)是一款开源的、兼容 Cisco Anyconnect 的服务端软件。由于思科在网络设备中的特殊地位,Anyconnect 一直未被特殊照顾。目前状况下通讯较为稳定,干扰较小。主要优势是多平台的支持,Windows、Android、iOS 都能找到它的客户端。由于是“真全局”代理,也可用于做游戏加速。缺点是搭建较为复杂,协议特征非常明显,同时硬件占用较大。

搭建过程

首先需要准备域名及对应 SSL 证书,以及有公网 IP 的服务器一台(可以为 NAT 服务器)
服务器安装 Ubuntu 18.04,直接使用 apt install -y ocserv 即可安装。

配置细节

配置文件的位置在 /etc/ocserv/ocserv.conf,编辑配置文件,修改项目如下:

# auth 部分注释掉默认的配置,添加如下
auth = "plain[passwd=/etc/ocserv/ocpasswd]"

# listen 部分填写公网 IP 即可,如果是 NAT 服务器,则填写内网 IP,同时 listen-host-is-dyndns 改为 true
listen-host = 
listen-host-is-dyndns = false
# tcp 和 udp 端口建议修改
tcp-port = 443
udp-port = 443

# 这部分填写准备的 SSL 证书
server-cert = /etc/ssl/ocserv.crt
server-key = /etc/ssl/ocserv.key
ca-cert = /etc/ssl/ca.crt

# 此项建议设置为 false
isolate-workers = false

# 最大连接数量设置
max-clients = 32
max-same-clients = 0

# 掉线重连时间
keepalive = 32400
dpd = 90
cookie-timeout = 32400
try-mtu-discovery = true

# default-domain 修改
predictable-ips = false
default-domain = hkbn.wi-fi.services
ipv4-network = 192.168.10.0
ipv4-netmask = 255.255.255.0

# dns 代理
tunnel-all-dns = true
dns = 1.1.1.1
dns = 8.8.8.8

# 注释掉所有的 route 信息
#route = 10.10.10.0/255.255.255.0
#route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#route = default
#no-route = 192.168.5.0/255.255.255.0

cisco-client-compat = true

开启服务

创建用户名密码

ocpasswd -c /etc/ocserv/ocpasswd username

配置路由转发

apt install -y iptables iptables-persistent
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

# 查看网卡名称,一般为 ens3
ip a

iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
dpkg-reconfigure iptables-persistent

删除 ocserv.socket 服务

systemctl stop ocserv.socket && systemctl disable ocserv.socket && rm /lib/systemd/system/ocserv.socket

编辑 /lib/systemd/system/ocserv.service,注释掉如下两行

Requires=ocserv.socket
Also=ocserv.socket

开启 ocserv 服务

systemctl daemon-reload && systemctl restart ocserv.service && systemctl enable ocserv.service