Giter Club home page Giter Club logo

openwrt_pangolin's Introduction

openwrt_pangolin是一个快速部署路由器透明代理(路由器翻墙)的配置集,适用已刷入OpenWRT/LEDE或其他衍生固件的便携和家用路由器。

  1. 功能
  2. 原理
    1. DNS污染
    2. IP屏蔽/TCP阻断
  3. 安装
  4. 配置说明
    1. DNS套件
    2. 端口转发配置
    3. 工作模式配置(针对便携路由器)
  5. 已测试设备
  6. 参考

功能

本项目提供的所有功能均为可选配置,根据个人需要拷贝相关配置即可。具体的配置见“配置说明”一节。

  • 透明代理:终端无需任何设置即可访问国际互联网。代理工具支持shadowsocks-libevv2ray
  • 智能分流:国外HTTP/HTTPS流量走代理,国内流量、BT流量直连。
  • 多种方式抵御DNS污染。
  • 支持家用路由与便携路由,行走各地畅通无阻。

原理

DNS污染

目前GFW的DNS污染只针对使用UDP协议和53端口的服务器,因此对抗污染最简单的办法就是使用支持TCP协议或者非53端口的可信DNS服务器。 但这个方法比较脆弱,有两个原因:

  1. 比较知名的公共DNS的大多处于UDP被污染,TCP被阻断的状态。你需要费时费力寻找幸存IP甚至自建DNS服务。
  2. 即使解决了污染问题,紧接着就会发现国内多数网站并未对国外DNS做优化,导致访问国内站点比国外还慢的诡异现象。

针对问题1,我们让DNS请求通过代理查询即可解决。当然我们也可以使用DNScrypt这类工具提供安全DNS查询。 对于问题2,我们提供了两套方案:

  1. 使用ChinaDNS,它的原理是同时请求境内境外DNS服务器,并根据一个简单假设决定采用哪个结果。
    优点是方便,速度快且防污染(无需通过代理)。
    缺陷是境内DNS服务器会收到你的所有域名查询请求。
  2. 使用unbound作为DNS服务器,通过维护一个国内常用域名列表分流DNS查询。
    优点是配置灵活,支持自定义结果缓存策略,支持TCP、TLS等多种模式;
    缺点是DNS解析速度受代理速度影响;而且如果想优化国内域名查询的话,还需要维护一个国内域名列表。听起来不难,毕竟常去的网站就那么几个不是吗?但如果亲自尝试过就知道,真正影响网速体验的其实是提供图片视频加速的海量CDN域名。

为了节省你宝贵的时间做更多有意义的事情,我们推荐使用方案1。如果你非常介意隐私,其实可以结合这两个方案: 让ChinaDNS作为unbound的上游DNS服务,并在unbound中维护一个境外域名列表,符合规则的域名查询直接请求境外可信DNS服务器即可。

IP屏蔽/TCP阻断

对抗手段就是VPN或者应用层代理,把流量通过尚未被屏蔽的IP转发出去。本项目支持两个代理软件:

  1. shadowsocks-libev:配置简单,体积小巧,功能强大。使用shadowsocks协议实现安全数据传输。
  2. v2ray:配置灵活,支持多种协议,并可以灵活搭配,实现协议伪装等需求。 但配置文件略长,有一定学习门槛,并且软件体积较大(6~10MB),内存占用较多(>10MB)。

除此之外,我们使用iptables设置智能分流,只有到国外IP的HTTP/HTTPS流量经过代理。 IP规则用了精简过的国内IP段。如果需要自己生成,可以执行gen_china_list.sh生成chiana.list,自行精简后拷贝到/root/config/

安装

  1. 安装基础依赖,通过LuCI页面安装或者ssh [email protected]登录路由器执行命令(假定路由器IP192.168.1.1):

    opkg update
    opkg install ipset ca-certificates iptables-mod-tproxy unbound dnscrypt-proxy

    其中unbounddnscrypt-proxy视需要选择安装(适用于DNS方案2)。

  2. 下载安装代理工具:

    • shadowsocks-libev:根据路由器CPU架构下载对应的包,在路由器上执行opkg install ./shadowsocks-libev_VERSION_ARCH.ipk即可安装。
    • v2ray:根据CPU架构下载对应的包到本地,解压后上传到/root/v2ray。如需精简体积,可尝试自行编译
  3. 下载安装ChinaDNS(适用于DNS方案1),建议同时安装LuCI配置,安装方法不再赘述。

  4. 配置代理工具:编辑root/config/shadowsocks.jsonroot/config/v2ray.json。不建议修改本地端口(默认 1080),否则firewall.user中也要做出相应修改。

  5. 编辑etc/firewall.user将PROXY_SERVER_IP替换为代理服务器IP,如有多个使用逗号分隔。

  6. (建议)备份路由器配置。ssh登录路由器,备份/etc目录:

    tar -czvf etc.tar.gz /etc
  7. 拷贝需要的配置文件到OpenWRT路由器,注意要用-p参数保留文件权限。以下示例删除了便携路由配置,并拷贝其他所有配置到路由器:

    rm -rf etc/config/network* etc/config/wireless* etc/dnsmasq.conf etc/rc.button root/bin
    scp -rp etc root [email protected]:/
  8. ssh登录路由器,确保firewall, unbound, shadowsocks / v2ray在启动时自动运行:

    /etc/init.d/firewall enable
    # shadowsocks和v2ray只能启用一个
    /etc/init.d/shadowsocks enable
    /etc/init.d/v2ray enable
    # 以下DNS服务按需启动
    /etc/init.d/chinadns enable
    /etc/init.d/unbound enable
  9. 重启动路由器,可在LuCI页面控制或者登录路由器执行reboot

配置说明

DNS套件

方案1

  1. etc/config/dhcp: 设置dnsmasq将DNS查询转发到ChinaDNS的监听端口(2053)。主要改动如下:
    option noresolv '1'
    list server '127.0.0.1#2053'
    list server '::1#2053'
    
  2. etc/config/chinadns: ChinaDNS相关设置。国内IP段使用了精简IP列表/root/config/china.list,可以自行换回默认列表/etc/chinadns_chnroute.txt

方案2

  1. etc/config/dhcp: 设置dnsmasq将DNS查询转发到unbound的监听端口(1053)。主要改动如下:
    option noresolv '1'
    list server '127.0.0.1#1053'
    list server '::1#1053'
    
  2. unbound相关配置,主要改动如下:
    • etc/config/unbound: unbound UCI config, 从LEDE 17.01和OpenWRT 18.06开始提供。

      option listen_port '1053'   # 设置监听端口1053
      option manual_conf '1'      # 要求加载 /etc/unbound/unbound.conf
      
    • etc/unbound/unbound.conf: unbound标准配置,为了向后兼容重复了部分设置。

      server:
          num-threads: 2      # unbound线程数,建议与路由器CPU核数一致
          so-reuseport: yes   # 线程数>1时开启
          port: 1053
          # tcp-upstream: yes   # 可选使用TCP请求
          # 向所有DNS服务器发送edns-client-subnet,优化解析结果
          send-client-subnet: 0.0.0.0/0  # 需要unbound >= 1.6.7
      
      # 读取china-dns配置,对国内音视频网站使用DNSPod解析
      include: "/etc/unbound/china-dns.conf"
      
      # 其他域名使用DNScrypt和境外DNS
      forward-zone:
            name: "."
            # DNScrypt upstream
            forward-addr: 127.0.0.1@5353
            # Public DNS servers
            forward-addr: 8.8.8.8
      
    • etc/unbound/china-dns.conf: 可以自行添加国内域名解析规则。

      forward-zone:
          name: "qq.com."
          forward-addr: 119.29.29.29
      
  3. etc/firewall.user 需要取消对UDP转发配置的注释。
  4. etc/config/dnscrypt-proxy: DNScrypt配置,默认监听5353和5454两个端口。如果不使用需要删除unbound.conf中的对应转发目的地。

端口转发配置

  1. etc/firewall.userroot/config/china.list:设定iptables转发规则,做了一点微小的工作:

    1. 创建一个名为"BREAKWALL"的nat和mangle规则,分别用于TCP和UDP转发;
    2. 忽略目的地址为代理服务器的IP数据包;
    3. 创建ipset表,设置忽略内网地址和来自china.list的国内IP段;
    4. 其他路由到此规则的流量统统转发到1080端口
    5. 将该规则应用到所有目标端口为TCP 80和443的局域网流量(HTTP和HTTPS流量),以及目标端口为TCP/UDP 53的局域网和路由器自身流量(用于方案2的DNS查询)。

    注意: 如果你的转发规则没有生效,检查/etc/config/firewall,确保包含如下配置:

    config include
        option path '/etc/firewall.user' 
    

    同时执行/etc/init.d/firewall restart查看有没有报错。

  2. etc/init.d/包含了代理服务自启动配置;代理配置文件在root/config/下。

Tips: 如果你需要添加其他DNS,可以在墙外节点用下面的命令测试是否支持TCP查询:

dig @8.8.8.8 +tcp twitter.com

工作模式配置(针对便携路由器)

可以设置三种工作模式,轻触reset切换模式:

  • AP模式:用网线接到上级路由出口,比较适合在酒店使用。
  • client模式:使用无线连接到上级路由,适合没有网线不适宜使用AP模式的场合。网速会比AP模式稍慢。
  • router模式:适合需要拨号上网的情况,比如家庭路由器。

子网段设置为10.10.10.0/24,不太容易跟上级路由冲突。配置方法如下。

  1. etc/config/network.router填入你从ISP获得的拨号账号与密码

  2. etc/config/wireless.{ap,router,client}:更改WIFI SSID和密码,加密模式可以参考OpenWRT Wiki。 默认为 穿山甲@[模式],密码均为 88888888。可以把不同模式下的SSID都设成一样,但是这样会不太方便区分路由器运行在什么模式下。

  3. etc/dnsmasq.conf:设置DHCP的IP分配范围,从10.10.10.10010.10.10.150

  4. etc/rc.button/reset:设置reset按钮,通过调用/root/bin/toggle_ap.sh切换工作模式。

  5. root/bin/toggle_ap.sh负责切换工作模式;auto_toggle.sh可以设置为开启启动脚本,如果当前工作模式为client但扫描不到名为“XXXclient”的无线网时,自动切换工作模式,这样可以确保路由器能够启用无线网络。

已测试设备

欢迎提交issue补充更多设备支持信息。

便携路由

OpenWRT 15.05 on:

Nexx WT3020, TP-Link TL-WR703N, Kingston MLWG2

家用路由

OpenWRT 17.01, 18.06 on:

Linksys WRT1900ACS

参考

openwrt_pangolin's People

Contributors

cherrot avatar roylez 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

openwrt_pangolin's Issues

WR703N 固件

我手上有一个WR703N,已经刷好的LEDE 固件。但不什么安装 shadowsocks,能否帮忙传一份你的备份给我呢。提前感谢。

unbound已设置tcp-upstream,但dns查询并没有转发到shadowsocks

手动启动ss-redir打印verbose日志,在本机作如下测试:

dig +tcp youtube.com @168.126.63.1
dig -p 1053 +tcp youtube.com @10.10.10.1

4执行第一条命令时,ss-redir能观察到168.126.63.1:53的流量,执行第二条时没有记录,也查询不到结果(应该是到DNS Server的TCP连接被阻断了)。

由于unbound没有verbose日志,不确定问题出在哪。倾向于认为是unbound自己的问题,可能压根就没有发起upstream查询 我把forward-addr改成本机IP,开nc监听,能观察到查询流量,所以看起来是我的iptables没有设置对?

v2ray 如何编译路由器版本呢

路由器:wrt1900acs v2
使用的时候 v2ray 的 arm 固件太大,无法放入
精简编译的时候发现 v2ray 已经换了 bazel 的编译方式

或者有考虑使用外接u盘或者硬盘实现的方法嘛?

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.