因长期在大陆出差,除了 Android 手机可以完美翻墙,Windows 电脑(Windows 10 APP 和某些软体会忽略系统 Proxy 设定) 和 iPhone 手机 都无法完美翻墙,所以需要制作一个翻墙路由器,来满足翻墙需求,之前有拿一个随便捡的路由器成功制作翻墙,但遇到很多雷(e.g. 因为记忆体不足、储存容量不足),所以这次打算做一个笔记,纪录建议需求和安装方式

首先你要到 https://openwrt.org/toh/views/toh_fwdownload 了解 OpenWRT 支援的路由器有哪些(如果你愿意自行编译就跳过)

选择一台符合你预算和建议需求的路由器 (FLASH >= 16MB,RAM >= 64MB)

后来我发现了这台 https://openwrt.org/toh/hwdata/tp-link/tp-link_archer_c7_v5 ,其中记忆体和储存空间都符合建议需求,接下来就可以开始制作翻墙路由器拉

1. 找到 Firmware OpenWrt Install URL 右边的连结下载韧体档,使用路由器内建的韧体升级功能刷入 OpenWRT 第三方韧体

2. 刷完后预设 WIFI 不会开启,要使用有线网路连进去管理界面 http://192.168.1.1,设定一组密码并启用 SSH 登入(这里建议把LAN网段改掉,不然 192.168.1.0/24 太容易跟数据机冲突),并接上网际网路

3.  加入第三方 opkg 安装包来源(这边的 mips_24kc 必须视你的路由器的 Package architecture 而定)

wget http://openwrt-dist.sourceforge.net/packages/openwrt-dist.pub
opkg-key add openwrt-dist.pub
rm openwrt-dist.pub
echo src/gz openwrt_dist http://openwrt-dist.sourceforge.net/packages/base/mips_24kc >>/etc/opkg/customfeeds.conf
echo src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/packages/luci >>/etc/opkg/customfeeds.conf

4. 安装翻墙必要套件

opkg update
opkg install iptables-mod-tproxy
opkg install shadowsocks-libev
opkg install luci-app-shadowsocks
opkg install ChinaDNS
opkg install luci-app-chinadns
opkg install dns-forwarder
opkg install luci-app-dns-forwarder

安装好后会有这些东西

5. 取得中国 IP 清单 /etc/chinadns_chnroute.txt 供 shadowsocks-libev 的 Access Control 和 ChinaDNS 使用

wget -O /tmp/delegated-apnic-latest 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' && awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' /tmp/delegated-apnic-latest > /etc/chinadns_chnroute.txt

或是

wget --no-check-certificate https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt -O /tmp/china_ip_list.txt && mv /tmp/china_ip_list.txt /etc/chinadns_chnroute.txt

并且可搭配 crontab 排程自动更新(有使用 crontab 记得去 系统 > 系统 修改时区!)

crontab -e
#mean    minute  hour   date   month   week
#range   0-59    0-23   1-31   1-12    0-7
# 例如:每天早上 05:10 执行一次
10 5 * * *  your command
# 例如:每 5 分钟执行一次
*/5 * * * * your command
service cron start
service cron enable

6. 透过网页连进 OpenWRT 管理界面设定翻墙伺服器参数

ServicesShadowSocksServers Manage  设定一组 Shadowsocks 伺服器

ServicesShadowSocksAccess Control 设定 Zone WAN.Bypassed IP List 为  ChinaDNS CHNRoute

ServicesShadowSocksGeneral Settings 设定 Transparent Proxy.Main Server 为你刚刚设定的  Shadowsocks 伺服器

ServicesShadowSocksGeneral Settings 设定 Transparent Proxy.UDP-Relay Server 为 Same as Main Server

注:这里的 ServicesShadowSocks > Port Forward 完全没用,所以另外安装 dns-forwarder 代替 DNS 查询转送功能,避开中国 DNS 污染问题

Services >  DNS-Forwarder 设定你想要的 DNS Server 后勾选 Enable,并记住 Listen Port(我设定为5301)

NetworkDHCP and DNS > General Settings > DNS forwardings 设定为 127.0.0.1#<DNS-Forwarder 的 Listen Port>,我这边是设定为 127.0.0.1#5301

NetworkDHCP and DNS > Resolv and Hosts Files > 勾选 Ignore resolve file

7. 重启路由器测试翻墙啰~

 

说明:

1. ChinaDNS 怪怪的我后来没启用它,直接使用 dns-forwarder 解析 DNS ,这篇文章还是留下安装方式如果下次改版正常后可以使用,如果想要使用 ChinaDNS 要设定为 114.114.114.114,127.0.0.1:5301,Network >  DHCP and DNS > General Settings > DNS forwardings 要设定为 127.0.0.1#5353

2. 如何自己架设 Shadowsocks Server,我 这篇文章 有教学,可以参考

3. Services >  ShadowSocks >  Servers Manage 下的伺服器位置目前只支援输入 IP Address,不支援使用 Domain,解决方式可以自行透过 crontab 写一个排程来检查并修改 IP 位置

4. 如果想搭配 KCPTun 使用可以安装下列两个套件进行设定

opkg install kcptun
opkg install luci-app-kcptun

5. 如何实现 Point-to-Site ?

假如 Server 端的 IP 网段为 192.168.0.0/24,当 Opwrt 翻墙路由器在存取这类 Private IP 时会忽略 Shadowsocks,是因为 OpenWRT 在开机时会载入 /var/etc/shadowsocks.include 设定这些 Private IP 要跳过 shadowsocks,而这个档案又是开机时自动生成的,所以无法透过修改这个档案来实现 Point-to-Site,这时候只要修改 /usr/bin/ss-rules 这个 rules 生成器即可。

找到 gen_special_purpose_ip() 这段 code,并把你需要连线的 Private IP 网段删除后重开机即可!

6. 透过网页介面改 LAN 网段常常失败(超时自动回朔),可透过指令修改介面位置:

# 修改 config interface 'lan' 的 option ipaddr
vim /etc/config/network
# 重启服务
service network restart

或是透过 UCI System

uci set network.lan.ipaddr='192.168.8.1'
uci commit
service network restart

7. 我看不懂英文介面,有中文或其他语言吗?

有,下面示范安装繁体中文介面的方法,其他语言可参考

opkg update
opkg install luci-i18n-base-zh-tw

8. shadowsocks 不能设定 domain 吗?

目前版本的 luci-app-shadowsocks & shadowsocks-libev 不支援使用 domain,但可以透过以下这个 shell script 搭配 crontab 排程实现

注:记得把网址改成你自己的 domain

#!/bin/bash
# Author: AwEi
# 2019/01/14
# https://awei791129.pixnet.net/blog/post/67514073
DOMAIN='your.domain'

current_ip_addr="$(uci get shadowsocks.@servers[0].server)"
ip_addr="$(nslookup $DOMAIN | awk '/^Address 1:/ { print $3 }' | grep -E '([0-9]{1,3}[\.]){3}[0-9]{1,3}')"
echo "Setting shadowsocks server IP. please wait..."
echo "New IP address is $ip_addr"
if [ ! -z $ip_addr ]; then
    if [ ! $ip_addr == $current_ip_addr ]; then
        uci set shadowsocks.@servers[0].server="$ip_addr"
        uci commit
        service shadowsocks restart
        echo "Reset shadowsocks server IP finish!"
    else
        echo "Shadowsocks IP does not need to change."
    fi
else
    echo "IP address resolve fail!"
fi

9. 如何验证 crontab 状态?

logread | grep "cron."

10. TP-Link Archer C7 v5 安装 Openwrt 后灯号都不亮?

这是这版本韧体的 Bug,目前网友已提出解决方法( USB 和 WPS 灯还是没作用.....,有网友有解可提供给我吗?):

# 把下面设定附加在这个档案后面
vim /etc/config/system
config led
option default '0'
option name 'wlan2g'
option sysfs 'archer-c7-v5:green:wlan2g'
option trigger 'phy1tpt'

config led
option default '0'
option name 'wlan5g'
option sysfs 'archer-c7-v5:green:wlan5g'
option trigger 'phy0tpt'

config led
option default '0'
option name 'wan'
option sysfs 'archer-c7-v5:green:wan'
option trigger 'switch0'
option port_mask '0x2'

config led
option default '0'
option name 'lan1'
option sysfs 'archer-c7-v5:green:lan1'
option trigger 'switch0'
option port_mask '0x4'

config led
option default '0'
option name 'lan2'
option sysfs 'archer-c7-v5:green:lan2'
option trigger 'switch0'
option port_mask '0x8'

config led
option default '0'
option name 'lan3'
option sysfs 'archer-c7-v5:green:lan3'
option trigger 'switch0'
option port_mask '0x10'

config led
option default '0'
option name 'lan4'
option sysfs 'archer-c7-v5:green:lan4'
option trigger 'switch0'
option port_mask '0x20'

 

参考来源:

https://v2mm.tech/topic/711/抛弃-udp-用-tcp-查询-dns

https://alalin.me/archives/805 (参考中国IP清单的取得方法)

如果遇到 opkg update 记忆体不足的解决方法:

https://stackoverflow.com/questions/34112053/openwrt-cant-install-packages-memory-issue

相关文章