Giter Site home page Giter Site logo

openwrt-ssr's Introduction

ShadowsocksR-libev for OpenWrt

简介

本项目在 ywb94/openwrt-ssr 的基础上修改

各平台预编译IPK请在本项目releases页面下载

特性

软件包包含 shadowsocksr-libev 的可执行文件,以及luci控制界面

支持SSR客户端、服务端模式(服务端支持部分混淆模式、支持多端口)

支持SOCK5代理;支持UDP中继;支持广告屏蔽

支持两种运行模式:IP路由模式和GFW列表模式(GFWList)

所有进程自动守护,崩溃后自动重启;支持服务器自动切换;

集成KcpTun加速,此功能对路由器性能要求较高,需下载对应的二进制文件到路由器指定目录,请酌情使用

客户端兼容运行SS或SSR的服务器,使用SS服务器时,传输协议需设置为origin,混淆插件需设置为plain

运行模式介绍

【IP路由模式】

  • 所有国内IP网段不走代理,国外IP网段走代理;
  • 白名单模式:缺省都走代理,列表中IP网段不走代理

优点:国内外分流清晰明确;适合线路好SSR服务器,通过代理可提高访问国外网站的速度;

缺点:开启BT下载时,如连接国外的IP,会损耗SSR服务器的流量;如果SSR服务器线路不好,通过代理访问国外网站的速度不如直连

【GFW列表模式】

  • 只有在GFW列表中的网站走代理;其他都不走代理;
  • 黑名单模式:缺省都不走代理,列表中网站走代理

优点:目标明确,只有访问列表中网站才会损耗SSR服务器流量

缺点:GFW列表并不能100%涵盖被墙站点,而且有些国外站点直连速度远不如走代理

注意:如果要使用SSR for OpenWRT的服务端接收手机的接入(通过3G/4G网络),请使用IP路由模式,原因是手机通过无线网络接入OpenWRT服务端,手机上如果要访问google,它使用的是手机上的DNS解析,域名解析是被污染的,指向的是一个随机IP,此IP不能和GFW列表匹配,因此如果使用GFW模式,将不能科学上网

如果在IP路由模式下代理正常,在GFW列表模式下无法正常访问,请检查DNS解析是否正确(服务器是否开启UDP转发、是否有其他dns软件冲突等)

编译

  • 从 OpenWrt 的 SDK 编译(编译环境:Ubuntu 64位系统),如果是第一次编译,还需下载OpenWrt所需依赖软件

    sudo apt-get install gawk libncurses5-dev libz-dev zlib1g-dev  git ccache
  • 下载路由器对应平台的SDK

    # 以 ar71xx 平台为例
    tar xjf OpenWrt-SDK-15.05-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2
    cd OpenWrt-SDK-*
    # 安装 feeds
    ./scripts/feeds update packages
    ./scripts/feeds install libpcre
    # 获取 Makefile
    git clone https://github.com/compasss/openwrt-ssr.git package/openwrt-ssr
    # 选择要编译的包 
    #luci ->3. Applications-> luci-app-shadowsocksR         原始版本
    #luci ->3. Applications-> luci-app-shadowsocksR-GFW     GFWList版本
    #V1.1.6以后版本取消发布单独的客户端和服务端,如有需要,请修改makefile或采用V1.1.5版本
    make menuconfig
    
    #如果没有安装po2lmo,则安装(可选)
    pushd package/openwrt-ssr/tools/po2lmo
    make && sudo make install
    popd
    #编译语言文件(可选)
    po2lmo ./package/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.po ./package/openwrt-ssr/files/luci/i18n/shadowsocksr.zh-cn.lmo
    
    # 开始编译
     make package/openwrt-ssr/compile V=99
  • LEDE编译补充

    LEDE是OpenWRT的另一个版本,LEDE的SDK采用xz压缩,需先用xz -d解压下载的SDK包,再按上述命令操作

    使用LEDE的SDK编译,可能会提示找不到zlib和openssl文件,请运行如下命令

    ./scripts/feeds update
    #如果更新base出现错误,修改SDK目录下的feeds.conf.default文件,将“source.git;HEAD”改为“source.git”
    
    ./scripts/feeds install zlib
    ./scripts/feeds install libopenssl
  • Pandorabox(潘多拉)编译补充

潘多拉也是Openwrt的另一个定制版本,用16.10版本的SDK编译时无法使用feed获取安装包,需要先将libpcre、zlib、libopenssl等makefile放入SDK的package目录,再make menuconfig

这三个包的makefile可以从这里下载

安装

本软件包依赖库:libopenssl、libpthread、ipset、ip、iptables-mod-tproxy、libpcre,GFW版本还需依赖dnsmasq-full、coreutils-base64,opkg会自动安装上述库文件

软件编译后可生成两个软件包,分别是luci-app-shadowsocksR(原始版本)、luci-app-shadowsocksR-GFW(GFW版本),用户根据需要选择其中一个安装即可

原始版本只支持IP路由模式,对现有OpenWRT系统改动较少;本地dns域名解析存在污染,由远端SSR服务器重新进行二次DNS解析;可和其他DNS处理软件一起使用;

GFW版本支持IP路由模式和GFW列表模式,需卸载原有的dnsmasq,会接管OpenWRT的域名处理,避免域名污染并实现准确分流;SSR服务器侧需开启UDP转发;

提醒:如果安装GFW版本,请停用当前针对域名污染的其他处理软件,不要占用UDP 5353端口

将编译成功的luci-app-shadowsocksR*_all.ipk通过winscp上传到路由器的/tmp目录,执行命令:

#刷新opkg列表
opkg update

#删除dnsmasq(GFW版本第一次安装需手动卸载dnsmasq,其他情况下不需要)
opkg remove dnsmasq 

#安装软件包
opkg install /tmp/luci-app-shadowsocksR*_all.ipk 

如要启用KcpTun,需从本项目releases页面或相关网站(网站1网站2)下载路由器平台对应的二进制文件,并将文件名改为ssr-kcptun,放入/usr/bin目录

安装后强烈建议重启路由器,因为luci有缓存机制,在升级或新装IPK后,如不重启有时会出现一些莫名其妙的问题;另GFW版本会安装、修改、调用dnsmasq-full,安装后最好能重启路由器

配置

软件包通过luci配置, 支持的配置项如下:

客户端服务器配置:

键名 数据类型 说明
auth_enable 布尔型 一次验证开关[0.关闭 1.开启],需要服务端同时支持
switch_enable 布尔型 此服务器是否可以自动切换
server 主机类型 服务器地址, 可以是 IP 或者域名,推荐使用IP地址
server_port 数值 服务器端口号, 小于 65535
local_port 数值 本地绑定的端口号, 小于 65535
timeout 数值 超时时间(秒), 默认 60
password 字符串 服务端设置的密码
encrypt_method 字符串 加密方式, 详情参考
protocol 字符串 传输协议,默认"origin"详情参考
obfs 字符串 混淆插件,默认"plain" 详情参考
obfs_param 字符串 混淆插件参数 详情参考
fast_open 布尔型 TCP快速打开 详情参考
kcp_enable 布尔型 KcpTun开启开关
kcp_port 数值 KcpTun服务器端口号, 小于 65535
kcp_password 字符串 KcpTun密码,留空表示"it's a secrect"
kcp_param 字符串 KcpTun参数详情参考

客户端其他配置:

名称 含义
全局服务器 选择要连接的SSR TCP代理服务器
UDP中继服务器 选择要连接的SSR UDP代理服务器
启用进程监控 启用后可对所有进程进行监控,发现崩溃自动重启
启用自动切换 启用后如果缺省代理服务器失效,可以自动切换到其他可用的代理服务器
自动切换检查周期 检查当前代理服务器是否有效的时间周期,默认10分钟(600秒)
切换检查超时时间 检查服务器端口或网络连通性的超时时间,默认3秒钟
DNS解析方式 用UDP隧道方式还是Pdnsd方式(TCP)来解析域名(GFW版本特有,安装pdnsd后显示)
启用隧道(DNS)转发 开启DNS隧道(原始版本特有)
隧道(DNS)本地端口 DNS隧道本地端口(原始版本特有,GFW固定为5353)
DNS服务器地址和端口 DNS请求转发的服务器,一般设置为google的dns地址
SOCKS5代理-服务器 用于SOCKS代理的SSR服务器
SOCKS5代理-本地端口 用于SOCKS代理的本地端口(注意此端口不能和SSR服务器配置中的本地端口相同)
访问控制-被忽略IP列表 IP路由模式时有效,用于指定存放国内IP网段的文件,这些网段不经过代理
访问控制-额外被忽略IP IP路由模式时有效,用于添加额外的不经过代理的目的IP地址
访问控制-强制走代理IP 用于添加需要经过代理的目的IP地址
路由器访问控制 用于控制路由器本身是否走代理,适用于路由器挂载BT下载的情况
内网访问控制 可以控制内网中哪些IP能走代理,哪些不能走代理,可以指定下面列表内或列表外IP
内网主机列表 内网IP列表,可以指定多个

服务端配置:

键名 数据类型 说明
enable 布尔型 是否启用此服务器配置
server 字符串 服务器本机IP地址, 一般为0.0.0.0
server_port 数值 服务器监听端口号, 小于 65535
timeout 数值 超时时间(秒), 默认 60
password 字符串 服务端设置的密码
encrypt_method 字符串 加密方式, 详情参考
protocol 字符串 传输协议,默认"origin"详情参考
obfs 字符串 混淆插件,默认"plain" 详情参考
obfs_param 字符串 混淆插件参数 详情参考
fast_open 布尔型 TCP快速打开 详情参考

在某些openwrt上的kcptun启用压缩后存在问题,因此在界面上加上了“--nocomp”参数,缺省为非压缩,请在服务端也使用非压缩模式

如要打开kcptun的日志,可以在kcptun参数栏填入"--nocomp --log /var/log/kcptun.log",日志会保存在指定文件中

IP路由模式的数据文件为/etc/china_ssr.txt,包含国内所有IP网段,一般很少变动,无需更新,如要更新,请在“状态”页面更新

GFW列表模式的数据文件为/etc/dnsmasq.ssr/gfw_list.conf,包含所有被墙网站,如需更新,请在“状态”页面更新

如果要自定义GFW规则,在目录/etc/dnsmasq.ssr下创建一个文件,名称任取,比如myrules.conf,在文件中按要求输入你需要添加的网址,比如要添加google.com.hk,需输入如下两行:

server=/.google.com.hk/127.0.0.1#5353
ipset=/.google.com.hk/gfwlist

添加后执行/etc/init.d/dnsmasq restart重启dnsmasq

广告过滤为GFW版本特有,数据文件为/etc/dnsmasq.ssr/ad.conf,其原理是将广告网站的IP地址解析为127.0.0.1,使用的数据库为easylistchina+easylist;广告过滤模块缺省未安装,用户在“状态”页面更新广告数据库后自动打开,如打开广告过滤后出现问题,请删除此文件并重启dnsmasq

自动切换说明:在服务器配置中如果某些服务器启用了自动切换开关,这些服务器就组成一个可以自动切换的服务器集合,当这些服务器中的某一个作为全局服务器使用,并打开了全局自动切换开关时,如果全局服务器故障,会自动在集合中寻找可用的服务器进行切换。你可以设置检测周期和超时时间。每次检测时会判断缺省服务器是否恢复正常,如果正常,会自动切换回缺省服务器。注:自动切换功能依赖路由器的检测,因此在“路由器访问控制”中应该设置为“正常代理”

自动切换和进程监控的日志可以在OpenWRT的“系统日志”中查看

GFW版本缺省使用DNS隧道(UDP)方式解析域名,要求SS/SSR服务器支持UDP转发。如果服务器不支持UDP转发或UDP方式的解析存在问题,可以使用Pdnsd,以TCP方式来进行DNS域名解析。用户需自行安装pdnsd,安装后会在客户端界面出现“DNS解析方式”选择项,可以选择“使用pdnsd方式”来解析,pdnsd缺省用TCP模式解析,用户可以设置DNS服务器地址和端口,设置的DNS服务器需支持TCP方式查询

官方新版本中已经取消了pdnsd的下载,如要下载,请在14.07版本中查找,如ar71xx的下载地址为: http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/generic/packages/oldpackages/pdnsd_1.2.9a-par-a8e46ccba7b0fa2230d6c42ab6dcd92926f6c21d_ar71xx.ipk

官方openssl的ipk在编译时去除了camellia和idea加密算法,如果使用官方的libopenssl,将无法使用这两种加密方式,如需使用,请重新编译openssl进行替换

问题和建议反馈

请点击本页面上的“Issues”反馈使用问题或建议

截图

客户端:

luci000

服务端:

luci000

状态页面:

luci000

openwrt-ssr's People

Contributors

tapqr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

openwrt-ssr's Issues

ywb94/shadowsocks-libev库已经不存在

编译过程中,由于ywb94/shadowsocks-libev库已经不存在,发生以下错误

openwrt-ssr-1.2.1.tar.gz: Download from https://github.com/ywb94/shadowsocks-libev failed
openwrt-ssr-1.2.1.tar.gz: Requires sha256sum for verification
Checking out files from the git repository...
Cloning into 'openwrt-ssr-1.2.1'...
remote: Repository not found.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.