分类目录归档:折腾路由器

华硕路由器官版固件自动执行自定义脚本的方法

以前开放的华硕路由器官版固件开机自动执行脚本的很多方法,目前已经失效。根据网上搜索和自己实践的情况看,目前只有利用usb_mount时候的钩子自动执行脚本还可以用,前提是插一个U盘在路由器上。

开启U盘装载自动执行脚本方法如下:

nvram set script_usbmount="sh /jffs/init.sh"
nvram commit

其中/jffs/init.sh是需要自动执行的脚本,例如:

#!/bin/sh
sed -i '$a192.168.3.123 myhost' /etc/hosts

#不能通过重启服务的方式,因为会还原hosts文件,只能kill
killall -SIGHUP dnsmasq

树莓派配置V2ray客户端及透明网关

透明网关搭建

v2搭建及测试

安装v2

  1. 官方一键脚本1
    sudo bash <(curl -L -s https://install.direct/go.sh)
  2. 下载脚本安装,其实与第1种方法一样
    wget https://install.direct/go.sh
    sudo chmod +x go.sh
    sudo bash go.sh
  3. 离线安装,在网络不佳或不合适的情况下使用本地安装在第2步中下载 go.sh 同时在v2ray-core-releases下载 v2ray-linux-arm.zip ,如果树莓派中网络不佳可以在自己的PC机下载完之后迁移文件到树莓派中。
    wget -O v2ray_install.sh https://install.direct/go.sh
    chmod +x v2ray_install.sh
    sudo ./v2ray_install.sh –local v2ray-linux-arm.zip
    配置v2
  4. 后续操作默认切换到 root 权限下,填写v2的配置json。
    sudo su root
    cat > /etc/v2ray/config.json << EOF
    {
    “log”: {
    “loglevel”: “warning”
    },
    “inbounds”: [
    {
    “tag”: “proxy”,
    “port”: 1090, // 监听端口
    “listen”: “127.0.0.1”,
    “protocol”: “socks”, // 入口协议为 SOCKS 5
    “sniffing”: {
    “enabled”: true,
    “destOverride”: [
    “http”,
    “tls”
    ]
    },
    “settings”: {
    “auth”: “noauth”, //socks的认证设置,noauth 代表不认证,由于 socks 通常在客户端使用,所以这里不认证
    “udp”: true
    },
    “streamSettings”: null
    }
    ],
    “outbounds”: [
    {
    “tag”: “proxy”,
    “protocol”: “vmess”, // 出口协议
    “settings”: {
    “vnext”: [
    {
    “address”: “server.com”, // 服务器地址,请修改为你自己的服务器 IP 或域名
    “port”: 10010, // 服务器端口
    “users”: [
    {
    “id”: “b831381d-6324-4d53-ad4f-8cda48b30811”, // 用户 ID,必须与服务器端配置相同
    “alterId”: 32 // 此处的值也应当与服务器相同
    }
    ]
    }
    ]
    }
    }
    ]
    }
    EOF
    对上述配置中的protocol以及vnext 下的 address 、 port 、 id 、 alterId 进行修改,这是必须修改的内容,其含义可参照注释,其他内容可不改变,如果懂得配置的话可以自行修改其余内容。
  5. 开启v2服务下面命令中以 # 开头为注释内容。
    systemctl start v2ray
    # 或使用 service v2ray start
    ps -ef|grep v2ray
    # 或使用 service v2ray status
    正常情况下,v2已经开始运行,查看状态结果如下图。
    v2正常运行配置
    v2正常运行状态

全局代理及测试

  1. 配置全局代理编译安装 ProxyChains-NG 进行全局代理设置。
    git clone https://github.com/rofl0r/proxychains-ng.git
    cd /home/pi/proxychains-ng/
    ./configure && make && make install

    # 设置及修改配置
    cp ./src/proxychains.conf /etc/proxychains.conf
    vim /etc/proxychains.conf
    proxychains.conf配置文件的最后部分内容做以下修改:1
    2
    – socks4 127.0.0.1 9050
    + socks5 127.0.0.1 1090
  2. 测试v2通过 IP 以及 HTTP 响应码测试 v2 是否搭建成功。
    # 返回未代理前的本地公网地址
    curl ip.sb
    # 返回代理过的v2服务器地址,表示搭建成功,若长时间无响应或返回非服务端 IP 地址的内容则表示搭建失败
    proxychains4 curl ip.sb
    # 返回 200 或 301 表示搭建成功,若返回 000 或长时间无反应则表示搭建失败
    proxychains4 curl -so /dev/null -w “%{http_code}” google.com -x socks5://127.0.0.1:1090

透明网关搭建

V2配置透明代理的入站和DNS分流

将以下配置内容覆盖原先的v2配置内容,即修改 /etc/v2ray/config.json 下的内容。

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
{
“inbounds”: [
{
“tag”:”transparent”,
“port”: 12345,
“protocol”: “dokodemo-door”,
“settings”: {
“network”: “tcp,udp”,
“followRedirect”: true
},
“sniffing”: {
“enabled”: true,
“destOverride”: [
“http”,
“tls”
]
},
“streamSettings”: {
“sockopt”: {
“tproxy”: “tproxy” // 透明代理使用 TPROXY 方式
}
}
},
{
“port”: 1090,
“protocol”: “socks”, // 入口协议为 SOCKS 5
“sniffing”: {
“enabled”: true,
“destOverride”: [“http”, “tls”]
},
“settings”: {
“auth”: “noauth”
}
}
],
“outbounds”: [
{
“tag”: “proxy”,
“protocol”: “vmess”, // 代理服务器
“settings”: {
“vnext”: [
{
“address”: “server.com”, // 服务器地址,请修改为你自己的服务器 IP 或域名
“port”: 10010, // 服务器端口
“users”: [
{
“id”: “b831381d-6324-4d53-ad4f-8cda48b30811”, // 用户 ID,必须与服务器端配置相同
“alterId”: 32 // 此处的值也应当与服务器相同
}
]
},
“streamSettings”: {
“sockopt”: {
“mark”: 255
}
},
“mux”: {
“enabled”: true
}
},
{
“tag”: “direct”,
“protocol”: “freedom”,
“settings”: {
“domainStrategy”: “UseIP”
},
“streamSettings”: {
“sockopt”: {
“mark”: 255
}
}
},
{
“tag”: “block”,
“protocol”: “blackhole”,
“settings”: {
“response”: {
“type”: “http”
}
}
},
{
“tag”: “dns-out”,
“protocol”: “dns”,
“streamSettings”: {
“sockopt”: {
“mark”: 255
}
}
}
],
“dns”: {
“servers”: [
“8.8.8.8”, // 非中中国大陆域名使用 Google 的 DNS
“1.1.1.1”, // 非中中国大陆域名使用 Cloudflare 的 DNS(备用)
“114.114.114.114”, // 114 的 DNS (备用)
{
“address”: “223.5.5.5”, //中国大陆域名使用阿里的 DNS
“port”: 53,
“domains”: [
“geosite:cn”,
“ntp.org”, // NTP 服务器
“$myserver.address” // 此处改为你 VPS 的域名
]
}
]
},
“routing”: {
“domainStrategy”: “IPOnDemand”,
“rules”: [
{ // 劫持 53 端口 UDP 流量,使用 V2Ray 的 DNS
“type”: “field”,
“inboundTag”: [
“transparent”
],
“port”: 53,
“network”: “udp”,
“outboundTag”: “dns-out”
},
{
// 直连 123 端口 UDP 流量(NTP 协议)
“type”: “field”,
“inboundTag”: [
“transparent”
],
“port”: 123,
“network”: “udp”,
“outboundTag”: “direct”
},
{
“type”: “field”,
“ip”: [
// 设置 DNS 配置中的国内 DNS 服务器地址直连,以达到 DNS 分流目的
“223.5.5.5”,
“114.114.114.114”
],
“outboundTag”: “direct”
},
{
“type”: “field”,
“ip”: [
// 设置 DNS 配置中的国内 DNS 服务器地址走代理,以达到 DNS 分流目的
“8.8.8.8”,
“1.1.1.1”
],
“outboundTag”: “proxy” // 改为你自己代理的出站 tag
},
{
// 广告拦截
“type”: “field”,
“domain”: [
“geosite:category-ads-all”
],
“outboundTag”: “block”
},
{
// BT 流量直连
“type”: “field”,
“protocol”:[“bittorrent”],
“outboundTag”: “direct”
},
{
// 直连中国大陆主流网站 ip 和 保留 ip
“type”: “field”,
“ip”: [
“geoip:private”,
“geoip:cn”
],
“outboundTag”: “direct”
},
{
// 直连中国大陆主流网站域名
“type”: “field”,
“domain”: [
“geosite:cn”
],
“outboundTag”: “direct”
}
]
}
}

同样的,对上述配置中的protocol以及 vnext 下的 address 、 port 、 id 、 alterId 进行修改,这是必须修改的内容,其含义可参照注释,其他内容可不改变,如果懂得配置的话可以自行修改其余内容。

配置透明代理规则

本文使用方法是tproxy,同时保证树莓派和其他客户端均能实现科学上网。

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
# 设置策略路由
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

# 代理局域网设备
iptables -t mangle -N V2RAY
iptables -t mangle -A V2RAY -d 127.0.0.1/32 -j RETURN
iptables -t mangle -A V2RAY -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A V2RAY -d 255.255.255.255/32 -j RETURN
# 直连局域网,避免 V2Ray 无法启动时无法连网关的 SSH,如果你配置的是其他网段(如 10.x.x.x 等),则修改成自己的网段
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p tcp -j RETURN
# 直连局域网,53 端口除外(因为要使用 V2Ray 的 DNS 解析)
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p udp ! –dport 53 -j RETURN
# 给 UDP 打标记 1,转发至 12345 端口
iptables -t mangle -A V2RAY -p udp -j TPROXY –on-port 12345 –tproxy-mark 1
# 给 TCP 打标记 1,转发至 12345 端口
iptables -t mangle -A V2RAY -p tcp -j TPROXY –on-port 12345 –tproxy-mark 1
# 应用规则
iptables -t mangle -A PREROUTING -j V2RAY

# 代理网关本机
iptables -t mangle -N V2RAY_MASK
iptables -t mangle -A V2RAY_MASK -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A V2RAY_MASK -d 255.255.255.255/32 -j RETURN
# 直连局域网
iptables -t mangle -A V2RAY_MASK -d 192.168.0.0/16 -p tcp -j RETURN
# 直连局域网,53 端口除外(因为要使用 V2Ray 的 DNS)
iptables -t mangle -A V2RAY_MASK -d 192.168.0.0/16 -p udp ! –dport 53 -j RETURN
# 直连 SO_MARK 为 0xff 的流量(0xff 是 16 进制数,数值上等同与上面V2Ray 配置的 255),此规则目的是避免代理本机(网关)流量出现回环问题
iptables -t mangle -A V2RAY_MASK -j RETURN -m mark –mark 0xff
# 给 UDP 打标记,重路由
iptables -t mangle -A V2RAY_MASK -p udp -j MARK –set-mark 1
# 给 TCP 打标记,重路由
iptables -t mangle -A V2RAY_MASK -p tcp -j MARK –set-mark 1
# 应用规则
iptables -t mangle -A OUTPUT -j V2RAY_MASK

设置开机服务自启

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mkdir -p /etc/iptables && iptables-save > /etc/iptables/rules.v4

# /etc/systemd/system/ 目录下创建一个名为 tproxyrule.service 的文件,写入以下内容
[Unit]
Description=Tproxy rule
After=network.target
Wants=network.target

[Service]

Type=oneshot

#注意分号前后要有空格
ExecStart=/sbin/ip rule add fwmark 1 table 100 ; /sbin/ip route add local 0.0.0.0/0 dev lo table 100 ; /sbin/iptables-restore /etc/iptables/rules.v4

[Install]
WantedBy=multi-user.target

# 执行以下命令完成开机自启
systemctl enable tproxyrule

注意事项

  1. 下载离线版v2时如果树莓派安装的是官方镜像系统则按照文中方法,如果自行安装了64位系统则需要下载 v2ray-linux-arm64.zip
  2. v2的客户端代理端口有点区别,就是socks下和HTTP下是相差一个数的,具体可自行体会;
  3. 配置文件中需要注意树莓派所在网段以及本地代理地址。

结束

树莓派的使用还有许多可待拓展,本文只是介绍了目前最新的将树莓派作为透明网关的配置方法。

参考网址:

https://linwhitehat.github.io/Blog/2020/03/24/%E7%8E%A9%E8%BD%AC%E6%A0%91%E8%8E%93%E6%B4%BE%EF%BC%88%E4%BA%8C%EF%BC%89.html

https://toutyrater.github.io/app/tproxy.html

AC86U官版固件安装vlmcsd KMS服务

 1.开启jffs和ssh(或telnet),登陆路由器管理界面,通过系统管理-系统设置开启jffs和ssh。

2.通过官方下载vlmcsd可执行文件(官方提供源码及一堆各环境下的编译好的可执行文件,有兴趣可以自己编译)https://github.com/Wind4/vlmcsd/releases/。
       3.上传vlmcsd可执行文件到路由器/
          mips架构的路由器使用/binaries/Linux/mips/little-endian/static/vlmcsd-mips32el-uclibc-static
          AC86U使用这个:arm架构的路由器使用/binaries/Linux/armlittle-endian/static/vlmcsd-armv7el-uclibc-static
          将文件重命名为vlmcsd,通过xftp,winscp等工具上传到路由器/jffs目录下
  4.通过ssh或telnet连接路由器
          赋予vlmcsd可执行权限
          chmod 700 vlmcsd
          启动vlmcsd
          /jffs/vlmcsd

          使用命令netstat -an |grep 1688 检查vlmcsd是否启动成功。

5.修改/jffs/scripts/nat-start,增加vlmcsd,实现自动运行。

6.增加dns解析,添加srv记录到/jffs/configs/dnsmasq.conf.add。  

输入命令
       echo “srv-host=_vlmcs._tcp,router,1688”>>/jffs/configs/dnsmasq.conf.add
  其中 _vlmcs._tcp 为服务名;router为路由在内网中的网络名称(可通过uname –n查看);1688为kms激活服务默认端口号;
       输入命令service restart_dnsmasq重启dnsmasq服务。

组建AiMesh分布式WiFi网络

新房子装修的时候有一个严重失误,就是没有预埋足够的网线,特别是卧室没有布线,导致主卧WiFi信息极差,曾经搞过多种方案,什么电力猫、WiFi中继这些,效果都不太理想。自从把工作了多年的Netgera WNDR4300(已刷Openwrt)换成华硕的86U,就在琢磨华硕的AiMesh,不知道这种分布式网络能不能解决家里的WiFi覆盖问题。开始考虑降低成本,再加一个66U B1,后来看Lyra Trio织女星挺不错,京东上两个套装也不到1千,效果肯定比一个66U强,而且外观挺漂亮,索性搞一套试试。

AiMesh组网网上有不少文章可以参考,不过一般都是普通路由器的组合,还少有像86U这样的路由器和织女星这类原本设计的分布式路由器组合的,所以有些操作需要摸索一下。总体来说过程不算太复杂,也没有走啥弯路,和用普通路由器组Mesh差不多,只是需要注意几点:

  1. 一开始按照织女星的说明进行初始化,将织女星的WAN口接到路由器上,模式选DHCP,完成后自动升级固件到382版本,然后可以加入后续节点。这不是我需要的模式,我是要把织女星加入到已有的AiMesh中,这样我又到86U里面,进入AiMesh里面搜索,但怎么也搜索不到。查了一下说明,看到了这篇https://www.asus.com/support/FAQ/1038071,里面说要重置后才能加入,于是重置了织女星,发现仍然无法搜索到。然后注意到,文章里面说织女星要384以后的版本才支持AiMesh,而自动升级的固件才382,难道是这个原因?既然自动升级不行,手动升级一下吧。果然,升级完成后再次重置,这次很快就搜到了,然后加入就可以啦。
  2. 按照华硕官方给的操作步骤,略显繁琐。其实要升级固件,完全不用完成织女星的初始化,不需要在Asus Lyra App里面进行操作。在新的织女星启动完成,白灯常亮以后,直接用电脑连接织女星的WiFi,然后在浏览器里输入router.asus.com/Main_Login.asp进入登录页面,首先会让你设置管理员密码,设置完成后会进入路由器管理界面,直接在完成固件升级即可。后续就和官方文档里面的一样啦。
  3. Lyra APP在织女星加入AiMesh后就不能用了,不过可以用Asus Router APP来查看。

AiMesh组建完成后,从实际使用效果来看,主卧的台式机下载能超过100Mbps, 比以前的几种方案效果都要好一些,应该说还是有效果的,而且手机在几个房间漫游也能无缝切换,总的来说基本满意。

开启路由器IPv6

IPv6其实发布很久啦,只是实际上网的时候用的还是少。好像去年开始,发现手机上网的时候,有的App会提示使用的是IPv6。这几天在折腾路由器,就在想既然手机都能用IPv6啦,那宽带应该也可以吧。以前主路由器用的OpenWRT的,默认开启了IPv6,但那个WAN6始终处于未联机状态。这次换了华为的86U,是支持IPv6的,只是没有开启。打开IPv6配置页面,好多模式,不知道该用哪个,也没有详细说明,上网查了一下,有的说用Native加PPP,有的又说用Passthrough加局域网,只好一个个试。

结果几个组合都试完还是不行,然后再到网上查,发现一篇文章里面说了,需要在光猫里面配置一下才行。重点就是IP模式要改成“IPv4&IPv6”。需要注意的是,配置这些参数需要进入维护界面,需要使用隐藏超级用户才行,我的路由器上用户名是useradmin,密码是nE7jA%5m,或者参考http://www.52asus.com/thread-12939-1-1.html

配完之后,openwrt路由器的WAN6立马激活了,86U经过测试,下面的组合是有效的。

然后到https://test-ipv6.com/测试一下就知道成没成啦。