在 OpenWrt 部署 Shadowsocks

前言

关于 OpenWrt 请看 OpenWrt 入门篇
关于 Shadowsocks 请看 什么是 Shadowsocks
已有 Shadowsocks 账号, 后续可能会记录。
重要: 本文前提为读者已观看过以上2篇文章,如阅读引起任何不适请立即停止。

关于 Shadowsocks-libev 模块

Shadowsocks-libev 官网
Shadowsocks-libev 下载地址 (推荐下载非spec版本)

ss-server:服务器端,部署于服务器,提供 shadowsocks 服务。
ss-local:客户端,提供 SOCKS 代理
ss-redir:客户端,提供透明代理, 从 v2.2.0 开始支持 UDP
ss-tunnel: 客户端,提供端口转发, 可用于 DNS 查询

Note: 下载的时候请根据 CPU 类型, 查看方式请参照

安装 Shadowsocks-libev

  1. 将下载的Shadowsocks-libev移至路由器/tmp目录
    1
    scp shadowsocks-libev-polarssl_2.4.8-2_ar71xx.ipk [email protected]:/tmp
  2. 安装依赖
    1
    2
    opkg update
    opkg install iptables-mod-nat-extra ipset libopenssl
  3. 安装Shadowsocks-libev
    1
    opkg install /tmp/shadowsocks-libev-polarssl_2.4.8-2_ar71xx.ipk

配置 shadowsocks

  1. 修改/etc/shadowsocks.json为实际参数。格式如下
    1
    2
    3
    4
    5
    6
    7
    8
    {
    "server": "127.0.0.1",
    "server_port": 443,
    "local_port": 7654,
    "password": "password",
    "timeout": 60,
    "method": "rc4-md5"
    }
    此处, “local_port”: 7654 为重点。不理解的, 请不要进行修改此项,后续会解释。
    注: /etc/shadowsocks.json 为配置文件, 存储 shadowsocks 的账号、 密码及设置。
  2. 查看/etc/init.d/shadowsocks。内容如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/bin/sh /etc/rc.common

    START=95

    SERVICE_USE_PID=1
    SERVICE_WRITE_PID=1
    SERVICE_DAEMONIZE=1

    CONFIG=/etc/shadowsocks.json

    start() {
    service_start /usr/bin/ss-local -c $CONFIG -b 0.0.0.0
    #service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0
    #service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -l 5353 -L 8.8.8.8:53 -u
    }

    stop() {
    service_stop /usr/bin/ss-local
    #service_stop /usr/bin/ss-redir
    #service_stop /usr/bin/ss-tunnel
    }
    注: /etc/init.d/shadowsocks 为运行文件, shadowsocks 的启动、停止、重启。
  3. 运行检查配置是否正确
    1
    /etc/init.d/shadowsocks restart
  4. 使用代理进行检查, Chrome 浏览器下载 ExtensionProxy SwitchyOmega,墙内地址后续补上..。对插件进行如下配置:
    image
  5. 在 Chrome 浏览器使用 ExtensionProxy SwitchyOmega 切换到该协议并访问 YouTuBe,验证其配置的正确性。
  6. 关闭 shadowsocks
    1
    /etc/init.d/shadowsocks stop

自动化

安装 dnsmasq & ipset

  1. 查看是否支持 ipset
    1
    2
    3
    4
    5
    6
    7
    8
    9
    opkg update
    opkg list-installed
    dnsmasq -v

    # 如果不支持,卸载掉安装full版
    opkg remove dnsmasq
    opkg install dnsmasq-full
    opkg install ipset iptables-mod-nat-extra
    opkg install /tmp/pdnsd_1.2.9a-par-a8e46ccba7b0fa2230d6c42ab6dcd92926f6c21d_ar71xx.ipk
    附件:
  2. 配置 dnsmasq 和 ipset
    1
    2
    vim /etc/dnsmasq.conf
    mkdir /etc/dnsmasq.d
    在末尾加入
    1
    2
    3
    conf-dir=/etc/dnsmasq.d
    cache-size=1500 #修改dnsmasq缓存大小,默认为150。
    min-cache-ttl=720 #修改DNS缓存最小有效期(秒)。仅适用于aa65535的dnsmasq-full版本。
  3. 下载国内重要网站名单,用国内域名服务器查询iP地址
    1
    2
    3
    4
    5
    cd /etc/dnsmasq.d
    opkg install wget
    wget -4 --no-check-certificate -O /etc/dnsmasq.d/accelerated-domains.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf
    wget -4 --no-check-certificate -O /etc/dnsmasq.d/bogus-nxdomain.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/bogus-nxdomain.china.conf
    echo "server=/#/127.0.0.1#3210" > gfwlist.conf
  4. 修改/etc/init.d/shadowsocks启动文件, 内容如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/bin/sh /etc/rc.common

    START=95

    SERVICE_USE_PID=1
    SERVICE_WRITE_PID=1
    SERVICE_DAEMONIZE=1

    CONFIG=/etc/shadowsocks.json

    start() {
    sed -i 's/114.114.114.114/127.0.0.1#3210/' /etc/dnsmasq.d/gfwlist.conf
    /etc/init.d/dnsmasq restart

    service_start /usr/bin/ss-redir -b 0.0.0.0 -c $CONFIG -f /var/run/shadowsocks.pid -u
    service_start /usr/bin/ss-tunnel -b 0.0.0.0 -c $CONFIG -l 3210 -L 8.8.8.8:53 -u
    /usr/bin/shadowsocks-firewall
    }

    stop() {
    sed -i 's/127.0.0.1#3210/114.114.114.114/' /etc/dnsmasq.d/gfwlist.conf
    /etc/init.d/dnsmasq restart

    service_stop /usr/bin/ss-redir
    service_stop /usr/bin/ss-tunnel
    killall ss-redir
    killall ss-tunnel
    /etc/init.d/firewall restart
    }
  5. 配置 iptables 防火墙转发IP和端口
    创建执行文件 /usr/bin/shadowsocks-firewall
    1
    2
    touch /usr/bin/shadowsocks-firewall
    chmod +x /usr/bin/shadowsocks-firewall
    /usr/bin/shadowsocks-firewall 其内容如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #!/bin/sh

    #create a new chain named SHADOWSOCKS
    iptables -t nat -N SHADOWSOCKS
    iptables -t nat -N SHADOWSOCKS_WHITELIST

    # Ignore your shadowsocks server's addresses
    # It's very IMPORTANT, just be careful.
    iptables -t nat -A SHADOWSOCKS -d 此处为服务器IP -j RETURN

    # Ignore LANs IP address
    iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
    iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN

    # Check whitelist
    iptables -t nat -A SHADOWSOCKS -j SHADOWSOCKS_WHITELIST
    iptables -t nat -A SHADOWSOCKS -m mark --mark 1 -j RETURN

    #for hulu.com
    iptables -t nat -A SHADOWSOCKS -p tcp --dport 1935 -j REDIRECT --to-ports 7654
    iptables -t nat -A SHADOWSOCKS -p udp --dport 1935 -j REDIRECT --to-ports 7654

    # for Chrome browser and youtube.com
    iptables -t nat -A SHADOWSOCKS -p udp --dport 443 -j REDIRECT --to-ports 7654

    # Anything else should be redirected to shadowsocks's local port
    iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 7654
    # Apply the rules
    iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS

    # Ignore China IP address
    # for white_ip in `cat /etc/chinadns_chnroute.txt`;
    # do
    # iptables -t nat -A SHADOWSOCKS_WHITELIST -d "${white_ip}" -j MARK --set-mark 1
    # done

    # Ignore Asia IP address
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 1.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 14.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 27.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 36.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 39.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 42.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 49.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 58.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 59.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 60.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 61.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 101.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 103.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 106.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 110.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 111.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 112.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 113.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 114.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 115.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 116.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 117.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 118.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 119.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 120.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 121.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 122.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 123.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 124.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 125.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 126.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 169.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 175.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 180.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 182.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 183.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 202.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 203.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 210.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 211.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 218.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 219.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 220.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 221.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 222.0.0.0/8 -j MARK --set-mark 1
    iptables -t nat -A SHADOWSOCKS_WHITELIST -d 223.0.0.0/8 -j MARK --set-mark 1
    重要:
    1. 此处为服务器IP更换为实际IP。
    2. Ignore Asia IP address为亚洲IP地址段。如果路由器内存够大的话,可开启Ignore China IP addresschinadns_chnroute.txt 文件下载
    3. --to-ports 7654/etc/shadowsocks.json中的 “local_port”: 7654

shadowsocks 控制

1
2
3
4
/etc/init.d/shadowsocks stop
/etc/init.d/shadowsocks start
/etc/init.d/shadowsocks enable
/etc/init.d/shadowsocks disable
分享到