匿名科学上网教程:sing-box, overtls, OpenWrt
- 简单、高速、稳定的科学上网软件 overtls 安装、使用教程
- overtls + sing-box,分享一个比较完美的 sing-box 配置
- Tor 浏览器使用方法
- Tor 命令行 + singbox + overtls 实现匿名科学上网
- 科学上网资源
最好的 OpenWrt 路由器 shadowsocks 自动科学上网、科学上网教程
手把手教你路由器刷OpenWrt固件,自动穿越万里长城
本科学上网方案的特点
放弃建立被墙网站黑名单的方案吧,被墙的网站每天在增加,黑名单永远无法完善
大道至简,一劳永逸!
- 建立国内重要网站白名单,在国内进行dns查询
- 其他网站通过通过 shadowsocks 服务端进行dns查询
- 亚洲或国内的IP流量走国内通道
- 其他流量通过shadowsocks服务端转发
- 路由器屏蔽国内外的广告
- 利用 Bash 一键切换科学上网模式
- Windows 电脑 Shadowsocks + Simple-obfs 科学上网教程
- Android 安卓手机安装 shadowsocks 科学上网教程
- 预编译科学上网固件的设置和使用 (WNDR4300为例)
- Digital Ocean 创建VPS教程
- 有哪些科学上网软件
- 科学上网失败的原因分析
知识若不分享,实在没有意义
2014年6月 Dropbox壮烈被墙
查资料发现,著名的开源路由器固件OpenWrt支持家里的路由器 TP-Link WR2543N V1 ,于是就给路由器安装了OpenWrt并设置为自动智能科学上网
再也没有打不开的网站了,自由的感觉真好: YouTube, twitter, FaceBook, Google...
什么是圣人,圣人就是得到和付出比较均衡的人:
- 天地生我,我敬天地
- 父母育我,我养父母
- 网上获得知识,网上分享知识
于是,花了许多天,查资料,写教程,调试固件,不知不觉一天就过去了
希望你应用本教程后,也把你的过程写下来,合并到这个项目中来: https://github.com/softwaredownload/openwrt-fanqiang
Linux下如何编译OpenWrt shadowsocks自动科学上网固件
- 首先把本项目clone到本地目录,如 ~/Downloads/openwrt-fanqiang
- 原始配置文件
- ~/Downloads/openwrt-fanqiang/openwrt/default 默认配置文件夹
- ~/Downloads/openwrt-fanqiang/openwrt/wndr4300 针对特定路由器型号的配置文件,此处以wndr4300为例
- 复制配置文件
- 本地建立配置文件目录,如 ~/Downloads/openwrt-wndr4300
- 复制默认配置文件夹下面的文件到 ~/Downloads/openwrt-wndr4300/ 下
- 如果有针对特定路由器的配置文件,也复制到~/Downloads/openwrt-wndr4300/,并覆盖同名文件
- 修改配置文件,编译后就直接可以用了。否则刷上固件后登录路由器再修改。主要修改:
- openwrt-wndr4300/etc/shadowsocks-libev/config.json
- openwrt-wndr4300/usr/bin/ss-firewall-asia
- openwrt-wndr4300/etc/uci-defaults/defaults
- 编译自定义固件,设置FILES=~/Downloads/openwrt-wndr4300
本项目规定的默认值
shadowsocks server: 1.0.9.8
shadowsocks server_port: 1098
shadowsocks local_port: 7654
shadowsocks tunnel_port: 3210
shadowsocks password: killgfw
root login password: fanqiang
WIFI password: icanfly9876
关于 IPv6
默认科学上网固件不支持IPv6
有的软件如 Dropbox 桌面客户端默认连接到服务端 IPv6 地址,ping dropbox.com
出来的是IPv6 地址, 可能导致客户端连接服务器失败,浏览器导航到 www.Dropbox.com 连接被重置 (可用 Mega 替代 Dropbox)
解决办法:网络连接的属性,不要勾选 Internet Protocol Version 6 (TCP/IPv6)
相关资源
-
Netgear WNDR4300 预编译科学上网固件,支持xchacha20-ietf-poly1305(2018-10-22): https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
-
shadowsocks-libev_3.2.0-1_mips_24kc.ipk, simple-obfs_0.0.5-3_mips_24kc.ipk (2018-10-22): https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
-
史上最详细的OpenWrt路由器科学上网教程下载 PDF epub (2018-10) https://software-download.name/2014/fanqiang-jiaocheng/
-
Shadowsocks-libev Windows 客户端下载: ss-redir ss-tunnel obfs-local (2018-08 by cokebar) https://software-download.name/2018/shadowsocks-libev-windows-binary-download/
-
D-Link DIR-505 预编译科学上网固件 (2018-10-22): https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
-
TP-Link TLWR2543 预编译科学上网固件 (2018-10-22): https://software-download.name/2014/openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade-bin-with-shadowsocks/
在线阅读史上最详细的科学上网教程
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
- https://xwvut.software-download.name
Thanks to Easy Software Download for hosting the firmware
科学上网资源
推荐科学上网软件
- sing-box:新一代超强通用代理工具
- sing-box 官方文档
- sing-box 多种科学上网协议的配置示例
- sing-box 规则集:官方: geosite
- sing-box 规则集:官方 geoip
- sing-box 规则集:MetaCubeX sing/geo
- sing-box 规则集:Toperlock geosite
- sing-box 规则集:DustinWin
- sing-box 去广告:DustinWin
- sing-box 去广告:MetaCubeX
- sing-box 去广告:AdBlock_Rule_For_Sing-box
- sing-box 去广告:秋风广告规则. simple
- sing-box 去广告:Dreista AdGuard-DNS-Filter. 4 mon
- 米开朗基杨: sing-box 基础教程:sing-box 的配置方法和使用教程
- Overtls:SOCKS5 代理,通過 TLS 實現數據傳輸,支持 TCP 和 UDP 轉發。Rust
- V2Ray 模块化的代理软件包
- Gost:GO 语言实现的安全隧道
- Brook:A cross-platform programmable network tool
- Hysteria:powerful, lightning fast and censorship resistant proxy in Go
- NaïveProxy
- XX-Net 接力GoAgent
- trojan
- Obfuscated OpenSSH Patch by zinglau
- i2pd: Invisible Internet Protocol
科学上网相关网站
- 编程随想 github 镜像
- sigvips Tor 教程
- 新品葱论坛
- onion 大厨
- 米开朗基杨:云原生搬砖师 & Sealos 开发者布道师 & FastGPT 熟练工
- 七尺宇 - YT
- Hongbo Lin -OpenWrt -Shadowsocks
- 跟 UMU 一起玩 OpenWRT
Shadowsocks
- Shadowsocks.org
- Shadowsocks libev
- OpenWrt Simple Obfs
- Shadowsocks Windows
- Shadowsocks QT5
- Shadowsocks Android
- Shadowsocks GO
- Shadowsocks 插件
DNS 相关
- IpData: check IP trust score
- scamalytics: Check IP fraud score
- ByDpi: 不用服务器绕过中国的SNI blocking
- 国内外可用 DNS DoH 及速度实测 - 开发调优 - LINUX DO
- 国内目前可用的DoH(2024-9-21) - 偷来的才是宝贝
- DNS leak test: ipleak.net
- DNS leak test: browserleaks.com
- Tun2proxy:tunnel interface for HTTP and SOCKS proxies on Linux, Android, macOS, iOS and Windows. in Rust
- Dnscrypt proxy
- Pcap DNSProxy
- ChinaDNS
- dnsmasq China List
- dnsforwarder
- A DNS server/forwarder/dispatcher written in Go
- glider - forward proxy with multiple protocols support
科学上网方案
科学上网教程:sing-box, overtls
简单、高速、稳定的科学上网软件 overtls 安装、使用教程
overtls 是 目前较新的 SOCKS5 型代理软件,在软件内部通过 TLS 实现数据传输,同时支持 TCP 和 UDP 流量转发
overtls 也可能是目前设计最简洁、使用最简单的科学上网软件
因为 GFW 不可能封锁用于互联网传输数据的 TLS 协议,overtls 就用 TLS 传输数据。又因为 TLS 是一种加密协议,所以,GFW 不知道协议传送的数据内容
当用户浏览某个网址如 https://claude.ai
时, overtls 客户端会访问我们在配置文件里约定的资源 uri,如 https/domain.com/zyxwvutsrqponmlkjih/
,overtls 服务端会向浏览器返回用户想看的内容
安装 overtls 的准备工作
-
一个带公网 IP 的 VPS 主机,必须自行购买
如果你还没有自己的虚拟服务器 VPS,建议使用 Zgo VPS
-
一个域名,可以购买或申请免费的,并将该域名解析到 VPS 主机的 IP 上
可以是主域名,如
domain.com
,也可以是子域名,如american.domain.com
-
一对 https 证书/私钥,证书可以自行购买,也可以在 Let's Encrypt 申请免费的
-
一个 http 服务端软件(如 nginx ),并提供用于伪装用途的站点资源或者充当前置的反向代理
Nginx 科学上网专用子域名设置
如果你已经在用一个具有 https 证书的主域名,再在 Nginx 里设置一个子域名用于 overtls 是非常简单的,下面是示例代码,注意,要把个性化内容修改成实际值
server {
server_name american.domain.com;
root /home/name/public/american/;
index index.html index.htm;
listen [::]:443;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/american.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/american.domain.com/privkey.pem;
}
修改设置后,重启 Nginx 以使修改生效:
sudo nginx -s reload
Ubuntu server 命令行安装 Overtls 服务端
wget https://raw.githubusercontent.com/shadowsocksr-live/overtls/master/install/overtls-install-musl.sh
chmod +x overtls-install-musl.sh
sudo ./overtls-install-musl.sh
...自动检查环境,安装依赖
请输入 你的网站域名 (形如 mygooodsite.com)
Please enter your domain name (for example: mygooodsite.com): american.domain.com
[OK] 正獲取公網 IP, 請耐心等待...
[OK] Obtaining public IP information, please wait patiently...
DNS resolution IP: ...
Local V4 IP: ...
Local V6 IP: ...
[OK] The DNS resolution IP matches local V4 IP
请输入 反向代理入口路径(不带前后斜杠), 默认值 zyxwvutsrqponmlkjih
Please enter reverse proxy path without slashes (default zyxwvutsrqponmlkjih): (注:可回车使用默认值)
请输入 站点端口号 (默认值 443)
Please enter the access port number (default: 443):(注:可回车使用默认值)
Failed to stop overtls.service: Unit overtls.service not loaded.
Failed to disable unit: Unit file overtls.service does not exist.
overtls uninstall success!
[OK] nginx has been installed before this moment
[OK] [nginx] copy files Completed
[OK] [CA] Create account key Completed
[OK] [CA] Create CSR file Completed
Parsing account key...
Parsing CSR...
Found domains: american.domain.com
Getting directory...
Directory found!
Registering account...
Registered! Account ID: ...
Creating new order...
Order created!
Verifying american.domain.com...
american.domain.com verified!
Signing certificate...
Certificate signed!
[OK] [CA] Obtain website certificate Completed
--2024-08-22 06:03:15-- ...
Resolving letsencrypt.org (letsencrypt.org)...
Connecting to letsencrypt.org (letsencrypt.org)|2600:1f1c:471:9d01::c8|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1647 (1.6K) [application/x-pem-file]
Saving to: ‘STDOUT’
2024-08-22 06:03:15 (21.8 MB/s) - written to stdout [1647/1647]
[OK] [CA] Merger of intermediate certificate and website certificate Completed
--2024-08-22 06:03:16-- ...
Resolving letsencrypt.org (letsencrypt.org) ...
Connecting to letsencrypt.org (letsencrypt.org)|...|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1939 (1.9K) [application/x-pem-file]
Saving to: ‘STDOUT’
[OK] [CA] Root certificate and intermediate certificate merge Completed
[OK] [CA] Certificate configuration Completed
no crontab for root
[OK] cron scheduled task update Completed
/etc/init.d/overtls starting...
Synchronizing state of overtls.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable overtls
Created symlink /etc/systemd/system/multi-user.target.wants/overtls.service → /lib/systemd/system/overtls.service.
保存自动生成的 overtls 配置文件 config.json
最后,自动安装程序会在命令行屏幕给出直接可用的配置文件,类似下面:
======== config.json ========
{
"remarks": "login-name-mark",
"tunnel_path": "/zyxwvutsrqponmlkjih/",
"test_timeout_secs": 5,
"server_settings": {
"forward_addr": "http://127.0.0.1:80",
"listen_host": "127.0.0.1",
"listen_port": 3210
},
"client_settings": {
"server_host": "20.19.18.17",
"server_port": 443,
"server_domain": "american.domain.com",
"listen_host": "127.0.0.1",
"listen_port": 7654
}
}
复制屏幕上的配置,保存到本机为 config.json
另外,屏幕上还显示 ssr,类似下面:
ssr://...
把这行内容保存到本机
可以把屏幕上显示的 QR code 图片也保存到本机
检查服务端 overtls 是否在运行:
ps ax | grep overtls
9840 ? Sl 0:00 /usr/local/bin/overtls -d -r server -c /etc/overtls/config.json
上面显示 overtls 正在运行
Ubuntu server 服务端控制 overtls 的运行
# 停止 overtls
sudo systemctl stop overtls
# 启动 overtls
sudo systemctl start overtls
# 重启
sudo systemctl restart overtls
命令行运行 overtls 科学上网教程
Windows 本机安装 Overtls 命令行软件
overtls 下载页面:
https://github.com/ShadowsocksR-Live/overtls/releases
2024-08-22 的下载链接:
创建日志文件
在工作目录里执行命令创建 .env 文件
,在 Msys bash 里是这样:
touch .env
可以通过这个文件查看软件的运行日志
命令行运行 overtls
我在 Windows 安装了 Msys Bash,用下面命令运行 overtls
./overtls.exe -r client -c ./config.json
设置 Chrome 浏览器科学上网
接下来我们得告诉浏览器把请求转发到 本机 7654 端口
假设你已经安装了 Chrome 浏览器
-
按 Windows 键,输入 chrome,在出来的 Google Chrome 图标上点右键
-
选择
Open File Location
打开文件所在位置 -
这时会打开 Chrome 快捷方式所在文件夹,并默认选中,Ctrl + C 复制
-
来到桌面,Ctrl + V 粘贴,把刚粘贴的快捷方式重命名为
Proxy
-
在 Proxy 图标上右击,选 Properties 属性
-
在 Target (目标)后面加一个英文空格,再加上下面的内容:
--proxy-server=socks5://127.0.0.1:7654
设置好以后,退出已经打开的 Chrome,点击这个 Proxy(Chrome),然后 浏览 https://youtube.com
如果设置都正确,应该科学上网无障碍了。这是本浏览器内全局科学上网,不区分国内、国外 IP,挺好,否则打开有些外网会很慢或者根本打不开
我们可以让 overtls 随机启动,想科学上网时就用刚才创建的快捷方式打开浏览器
用 overtls GUI 软件科学上网
如果你觉得命令行运行 overtls 稍有不便,那么可以试试 GUI 界面
下载 overtls 的 GUI 程序 ssrWin
ssrWin 下载页面:
https://github.com/ShadowsocksR-Live/ssrWin/releases
2024-08-22 的具体下载链接:
https://github.com/ShadowsocksR-Live/ssrWin/releases/download/v0.8.9/ssr-win-x64.zip
下载时可能报毒,这时需要设置一下才能下载
运行方法:
- 运行
ssrWin.exe
- 从
ssr
导入科学上网配置- 复制服务器安装 overttls 结束时显示的 ssr 字符串
- 在 ssrWin 托盘图标点右键,选择
import URL from clipboard
- 如果你修改了
config.json
,可用 overtls 命令行程序重新生成 ssr:overtls -c config.json -g
- 也可以从 QR 图片导入配置
- 把服务器安装 overttls 结束时显示的二维码图片截屏,并复制到内存
- 在 ssrWin 托盘图标点右键,选择
Scan QR code from screen
- 在 ssrWin 托盘图标的右键菜单里选择
Run
- 如果想要停止科学上网,就在 ssrWin 托盘图标点右键,选择
Stop
ssrWin 的配置文件是 settings.json
,退出 ssrWin 后,修改此文件,再启动 ssrWin 就可以使修改生效。如果想要在另一台 Windows 设备使用 ssrWin,只要把 settings.json
复制过去覆盖默认的文件,再启动 ssrWin.exe 就可以科学上网上网了,非常方便
如果配置了多个 overtls 服务端站点,可以都导入 ssrWin 并在其托盘图标的右键菜单中选择站点
然后可以点开 Chrome, Firefox, IE 或 其它浏览器科学上网了,这时已经修改了系统的代理设置, 不用特别在浏览器内部安装代理插件,已经安装的代理插件也请禁用或停用或卸载掉,否则有可能适得其反上不了网
2024-08-26 注:ssrWin 托盘图标有时会失去响应
VPS 安装 overtls 科学上网的注意事项
安装前建议阅读 overtls 的服务端自动安装脚本 overtls-install-musl.sh
有些事情必须注意,比如,安装脚本会删除 nginx/sites-enabled 目录:
rm -rf /etc/nginx/sites-enabled
同时也会删除 site_dir
安装脚本会在服务器上创建文件:
/etc/nginx/conf.d/overtls.conf
这个文件设置了反向代理,并设置为 defautl_server
如果你的 VPS 并不仅仅是用来科学上网,同 IP 下还有其他网站,并在某个正在使用的域名下设立了一个 overtls 科学上网专用的子域名,如 american.domain.com
,那么建议做如下操作
-
设置
defalut_server
overtls.conf
里已经设置了default_server
,那么/etc/nginx/sites-available/
目录下的网站配置文件里,不能再设置defalut_server
-
删除
/etc/nginx/sites-available/domain.com
里子域名american.domain.com
的配置,否则和overtls.conf
重复了 -
重新生成
/etc/nginx/sites-enabled
下的文件:cd /etc/nginx/sites-enabled sudo ln -ns ../sites-enabled/domain.com
-
重启服务,以使修改生效
sudo nginx -s reload sudo systemctl restart overtls
注意,如果 打开 https://american.domain.com
页面显示不是安全链接,则可能需要更新证书
/etc/nginx/conf.d/overtls.conf 的默认内容,类似如下
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /fakesite_cert/chained_cert.pem;
ssl_certificate_key /fakesite_cert/private_key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name american.domain.com;
index index.php index.html index.htm index.nginx-debian.html;
root /fakesite;
error_page 400 = /400.html;
location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location /zyxwvutsrqponmlkjih/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:10987;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name american.domain.com;
index index.php index.html index.htm index.nginx-debian.html;
root /fakesite;
location /.well-known/acme-challenge/ {
}
location / {
# rewrite ^/(.*)$ https://american.domain.com:443/ permanent;
}
}
overtls 开启 HTTP/2 加速网络连接
随着 Web 应用程序的发展,性能考虑因素变得更加重要。HTTP/2 是超文本传输协议的第二个主要版本,旨在解决 HTTP/1.x 的一些缺点并提高 Web 通信的性能。它最重要的增强功能之一是通过标头压缩、通过单个连接多路复用多个请求以及服务器推送功能等功能减少延迟。对于像 Nginx 这样的 Web 服务器,启用 HTTP/2 可以显著改善页面加载时间和整体用户体验
overtls 的默认设置并没有开启 HTTP/2,这时就会有连接错误。左键单击 ssrWin 的托盘图标可以查看运行日志,这时你可能会发现有时会出现红色字体行,其中有“http2socks”字样,表示 http2 连接失败
下面是 Ubuntu server 开启 HTTP/2 的步骤:
-
修改
/etc/nginx/conf.d/overtls.conf
,相关行修改后如下:listen [::]:443 ssl http2; listen 443 ssl http2;
-
移除旧的密码套件
如果你的网站配置文件
/etc/nginx/sites-enabled/domain.com
中有如下语句,请把它注释掉:# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
-
增加新的安全密码套件
在
/etc/nginx/nginx.conf
的http
块增加设置:ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
也可以改成修改网站配置文件
-
验证 HTTP/2 是否成功开启
验证 nginx 配置是否正确:
sudo nginx -t sudo systemctl restart nginx
验证 HTTP/2 是否在工作:
curl -I -L --http2 https://domain.com
如果显示类似下面的信息,说明万事大吉:
HTTP/2 200 server: nginx date: Wed, 04 Sep 2024 06:37:48 GMT content-type: text/html content-length: 234440 last-modified: Tue, 03 Sep 2024 13:47:25 GMT vary: Accept-Encoding etag: "6543210-98765" strict-transport-security: max-age=15768000; includeSubDomains accept-ranges: bytes
这时再运行 ssrWin,日志中就不会有相关的红色连接错误行,并且连接会更快更稳定
相关内容
- overtls + tun2proxy 实现全局科学上网,所有流量走代理
- overtls Android 手机科学上网上网教程
- 把 overtls、tun2proxy 设置成开机自动启动的系统服务
- 全能科学上网工具 sing-box + overtls 配置方法和使用教程
- https://github.com/ShadowsocksR-Live/overtls
- Overtls installation Tips
- https://github.com/ShadowsocksR-Live/ssrWin
- https://github.com/softwaredownload/openwrt-fanqiang
2024-08-23
2024-09-09
手动安装 overtls 的方法
本文内容测试环境为 Ubuntu 24.04
前文 简单、高速、稳定的科学上网软件 overtls 安装、使用教程 讲了自动安装 overtls 服务端的方法,这是软件作者提供的安装方法,存在很大问题,比如:
它会不经用户同意就擅自删除 /etc/nginx/sites-available/
目录下的文件,如果你不知道这点,就会发现你的网站忽然全部变成 404 ,你还有可能百思不得其解
既然使用 overtls 的前提是用户有自己的 https 网站,就不需要它为我们申请 https 证书
下面介绍手动安装 overtls server 的方法
用官方脚本安装 overtls,再修改设置
用官方脚本安装 overtls server
wget https://raw.githubusercontent.com/shadowsocksr-live/overtls/master/install/overtls-install-musl.sh
chmod +x overtls-install-musl.sh
sudo ./overtls-install-musl.sh
删除 overtls 安装的不需要的文件
#删除 overtls 创建的网站配置文件
sudo rm /etc/nginx/conf.d/overtls.conf
# 删除 overtls 创建的网站目录和证书文件
sudo rm -rf /fakesite*
#删除 overtls 的 https 证书自动续期:
sudo crontab -e
# 删除类似下面行:
0 0 10 * * /fakesite_cert/renew_cert.sh >/dev/null 2>&1
重新创建网站配置文件的软链接,解决网站 404 的问题
cd /etc/sites-enabled
sudo ln -s /etc/sites-available/mlkji.com
修改网站的 Nginx 配置文件,增加供 overtls 用的 location
你的网站的默认配置可能是这样:
server {
server_name mlkji.com www.mlkji.com;
listen [::]:443 default_server ssl http2;
listen 443 default_server ssl http2;
ssl_certificate /etc/letsencrypt/live/mlkji.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mlkji.com/privkey.pem; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_session_cache shared:SSL:10m;
location / {
root /home/zyx/public;
index index.html;
try_files $uri/ $uri =404;
}
}
增加类似下面内容:
location /eeeee-ddddd-ccccc-bbbbb-aaaaa/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:11100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
完整的网站 Nginx 配置文件:
server {
server_name mlkji.com www.mlkji.com;
listen [::]:443 default_server ssl http2;
listen 443 default_server ssl http2;
ssl_certificate /etc/letsencrypt/live/mlkji.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mlkji.com/privkey.pem; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_session_cache shared:SSL:10m;
location / {
root /home/zyx/public;
index index.html;
try_files $uri/ $uri =404;
}
location /eeeee-ddddd-ccccc-bbbbb-aaaaa/ {
proxy_redirect off;
proxy_pass http://127.0.0.1:11100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
解释:
当 Nginx 从 443 端口接收到 /eeeee-ddddd-ccccc-bbbbb-aaaaa/
的 uri 请求时,直接把请求转发到 overtls server 监听端口 11100
修改 overtls 服务端配置文件 config.json
修改 /etc/overtls/config.json
改成类似下面内容:
{
"remarks": "zyx-2024-12-21",
"tunnel_path": "/eeeee-ddddd-ccccc-bbbbb-aaaaa/",
"test_timeout_secs": 5,
"server_settings": {
"forward_addr": "http://127.0.0.1:80",
"listen_host": "127.0.0.1",
"listen_port": 11100
},
"client_settings": {
"server_host": "32.31.30.29",
"server_port": 443,
"server_domain": "mlkji.com",
"listen_host": "127.0.0.1",
"listen_port": 2211
}
}
这个 config.json 是 overtls 服务端和客户端通用的,服务端主要用到 server_settings
,客户端主要用到 client_settings
解释:
{
"remarks": "zyx-2024-12-21",
"tunnel_path": "/eeeee-ddddd-ccccc-bbbbb-aaaaa/", // 自定义 uri 字符串
"test_timeout_secs": 5,
"server_settings": {
"forward_addr": "http://127.0.0.1:80",
"listen_host": "127.0.0.1",
"listen_port": 11100 // 服务端监听端口
},
"client_settings": {
"server_host": "32.31.30.29", // VPS IP 地址
"server_port": 443,
"server_domain": "mlkji.com", // 网站 Nginx 配置文件中,增加了 overtls 相关设置的域名
"listen_host": "127.0.0.1",
"listen_port": 2211 // overtls 客户端监听的端口
}
}
最后,不要忘记重启 overtls 使修改生效
sudo systemctl restart overtls
# or
sudo service overtls restart
上述方法是不是比较繁琐?下面讲一种更加简单的 overtls 手动安装方法
不用 overtls 官方安装脚本,直接安装相关文件
假设你已经在一台 VPS 上安装了 overtls,想要在另一台使用同样操作系统的 VPS 上再次安装,这时,我们可以用 sudocp 传送相关的文件
sudocp from to /etc/init.d/overtls /usr/local/bin/overtls-bin /usr/lib/systemd/system/overtls.service /etc/overtls/config.json
再按照前面讲的方法修改网站 Nginx 配置文件和 /etc/overtls/config.json
然后执行下面命令:
# ${service_stub_path}
sudo chmod +x /etc/init.d/overtls
# ${service_desc_file_path}
chmod 754 /usr/lib/systemd/system/overtls.service
/usr/lib/systemd/systemd-sysv-install enable overtls
#ln -s /usr/lib/systemd/system/overtls.service /etc/systemd/system/multi-user.target.wants/overtls.service
# 可选的自动重启 overtls 计划任务
#(crontab -l; echo "${random_minute} ${random_hour} * * * systemctl restart overtls") | crontab -
(crontab -l; echo "43 2 * * * systemctl restart overtls") | crontab -
目前我还未测试过这个方法
2024-12-21
overtls + tun2proxy 实现全局科学上网,所有流量走代理
overtls Android 手机科学上网上网教程
把 overtls、tun2proxy 设置成开机自动启动的系统服务
overtls 搭配 sing-box 科学上网的方法
overtls + sing-box,分享一个比较完美的 sing-box 配置
overtls 的主要优点:科学上网协议不可能被 GFW 识别
sing-box 则是目前为止最强大的综合性科学上网工具
overtls 配合 sing-box,可能是目前最为优雅的科学上网方案
为了方便大家阅读,我把注释说明写在 sing-box json 配置文件里。json 文件本身不支持注释,VS Code 对此会提示语法错误,不过 sing-box 会跳过注释
sing-box config.json:
{
"log": {
"disabled": false,
// debug 用于调试,输出信息多。可改成 warn
"level": "debug",
// sing-box 命令行中指定工作目录,此处就可用相对路径
"output": "zz_/box.log",
"timestamp": true
},
"dns": {
"servers": [
{
// tx 指国内腾讯提供的 dns 服务
"tag": "dns_resolver-tx",
"address": "119.29.29.29",
"detour": "out-direct"
},
{
// direct 指直接用国内 dns,tx 为腾讯
"tag": "dns-direct-tx",
"address": "https://120.53.53.53/dns-query",
"address_resolver": "dns_resolver-tx",
"detour": "out-direct"
},
{
// 走代理使用国外 dns,cf 指 cloudflare (google dns 可能被干扰)
"tag": "dns-proxy-cf",
"address": "https://162.159.36.1/dns-query",
"address_resolver": "dns_resolver-tx",
"detour": "out-proxy"
},
{
"tag": "dns-block",
"address": "rcode://refused"
}
],
"rules": [
{
"outbound": "any",
"server": "dns_resolver-tx"
},
{
// 来源网上的 rule_set 名以 geo 开头,其他为自定义 runle_set
// 这个规则里包含自己的科学上网服务器所用的域名
// 要定义在 clash_mode 的前面
"rule_set": "domain-fanqiang-server",
"server": "dns-proxy-cf"
},
{
// 使用兼容 clash 的控制面板,选择“直连”时用的 dns
"clash_mode": "direct",
"server": "dns-direct-tx"
},
{
// 使用兼容 clash 的控制面板,选择“全局”时用的 dns
"clash_mode": "global",
"server": "dns-proxy-cf"
},
{
// 自定义域名,用国内 dns
"rule_set": "domain-direct",
"server": "dns-direct-tx"
},
{
// 自定义域名,通过代理使用国外 dns
"rule_set": "domain-proxy",
"server": "dns-proxy-cf"
},
{
// geo 开头规则来自网上,site 表示内容是域名集。ads 表示要屏蔽 dns 的广告相关域名
"rule_set": "geosite-category-ads-all",
"server": "dns-block"
},
{
// 规则名不以 geo 开头,这是个自定义规则
// 内容是使用国内 dns 的进程名字
"rule_set": "process_name-direct",
"server": "dns-direct-tx"
},
{
// 通过代理使用国外 dns 的进程名字
"rule_set": "process_name-proxy",
"server": "dns-proxy-cf"
},
{
// 通过代理使用国外 dns 的包名
"rule_set": "package_name-proxy",
"server": "dns-proxy-cf"
},
{
// 规则名以 geo 开头,这是来自网络的规则
// 里面包含被 GFW 屏蔽的域名集,当然要通过代理使用国外 dns
"rule_set":"geosite-gfw",
"server": "dns-proxy-cf"
},
{
// 国外 AI 相关域名,通过代理使用国外 dns
"rule_set": "geosite-ai",
"server": "dns-proxy-cf"
},
{
// 中国域名和位置在中国的域名,使用国内 dns
"rule_set": [
"geosite-cn",
"geosite-geolocation-cn"
],
"server": "dns-direct-tx"
}
],
// 下面行,IP 地址改成你所在省或市的,可以在网上查找并复制一个
"client_subnet": "119.37.192.0",
"strategy": "ipv4_only",
// 以上规则之外的域名 dns 走代理
// 如果你访问国内域名较多,可以改成国内 dns,此时访问国外域名时可能会泄露国内 IP 地址
"final": "dns-proxy-cf"
},
"ntp": {
"enabled": true,
"server": "time.apple.com",
"server_port": 123,
"interval": "30m0s",
"detour": "out-direct"
},
"inbounds": [
{
"tag": "tun-in",
"type": "tun",
"interface_name": "singbox-tun",
"inet4_address": "172.19.0.1/30",
"mtu": 9000,
"stack": "mixed",
"auto_route": true,
"strict_route": true,
"sniff": true
},
{
"tag": "socks-in",
"type": "socks",
"listen": "::",
"listen_port": 5319
}
],
"outbounds": [
{
// tag 是名字,方便在其他地方引用
// outbounds 中的 tag 都以 out 开头
"tag": "out-dns",
"type": "dns"
},
{
"tag": "out-direct",
"type": "direct"
},
{
"tag": "out-block",
"type": "block"
},
{
"tag": "out-proxy",
"type": "selector",
"outbounds": [
"proxy-overtls"
],
"default": "proxy-overtls"
},
{
"type": "socks",
"tag": "proxy-overtls",
"server": "127.0.0.1",
// 本机 overtls 监听的端口,根据实际情况修改
"server_port": 765,
"version": "5",
"network": "tcp",
"udp_over_tcp": {
"enabled": false,
"version": 2
}
}
],
"route": {
"rules": [
{
"type": "logical",
"mode": "or",
"rules": [
{
"protocol": "dns"
},
{
"port": 53
}
],
"outbound": "out-dns"
},
{
// 科学上网用的服务器域名,流量走直连
// 要定义在 clash_mode 的前面
// 否则,启用 "clash_mode": "global" 即在 clash 兼容的控制面板里选择“全局”时流量会走代理
"rule_set": "domain-fanqiang-server",
"outbound": "out-direct"
},
{
// 这个规则集的内容是走国内直连的 IP 地址
// 同样要定义在 clash_mode 的前面
"rule_set": "ip-direct",
"outbound": "out-direct"
},
{
// clash 兼容的控制面板,选择“直连”时,出站流量走“out-direct”
"clash_mode": "direct",
"outbound": "out-direct"
},
{
// clash 兼容的控制面板,选择“全局”时,出站流量走“out-proxy”,即走代理
"clash_mode": "global",
"outbound": "out-proxy"
},
{
// 规则集内容,出站流量走直连的域名
"rule_set": "domain-direct",
"outbound": "out-direct"
},
{
// 出站流量走代理的域名
"rule_set": "domain-proxy",
"outbound": "out-proxy"
},
{
// 出站流量走代理的进程名字
"rule_set": "process_name-proxy",
"outbound": "out-proxy"
},
{
// 出站流量走直连的进程名字
"rule_set": "process_name-direct",
"outbound": "out-direct"
},
{
// 出站流量走代理的包名
"rule_set": "package_name-proxy",
"outbound": "out-proxy"
},
{
// 国外 AI 相关域名,出站流量走代理
"rule_set": "geosite-ai",
"outbound": "out-proxy"
},
{
// 被 GFW 屏蔽的域名,出站流量走代理
"rule_set": "geosite-gfw",
"outbound": "out-proxy"
},
{
// 域名的地理位置不在中国,并且域名 IP 不在中国区,出站流量走代理
"type": "logical",
"mode": "and",
"rules": [
{
"rule_set": "geosite-geolocation-!cn"
},
{
"rule_set": "geoip-cn",
"invert": true
}
],
"outbound": "out-proxy"
},
{
"protocol": "quic",
"outbound": "out-block"
},
{
"inbound": "socks-in",
"outbound": "out-proxy"
},
{
// 中国域名,地理位置在中国的域名,IP 地址在中国,都直连
"rule_set": [
"geosite-cn",
"geosite-geolocation-cn",
"geoip-cn"
],
"outbound": "out-direct"
},
{
"ip_is_private": true,
"outbound": "out-direct"
}
],
"rule_set": [
{
// 规则集不以 goe 开头,这是自定义规则
"tag": "process_name-proxy",
"type": "remote",
"format": "source",
// 域名换成你自己的
"url": "https://your-domain.com/process_name-proxy.json",
"download_detour": "out-direct"
},
{
"tag": "process_name-direct",
"type": "remote",
"format": "source",
"url": "https://your-domain.com/process_name-direct.json",
"download_detour": "out-direct"
},
{
"tag": "package_name-proxy",
"type": "remote",
"format": "source",
"url": "https://your-domain.com/package_name-proxy.json",
"download_detour": "out-direct"
},
{
"tag": "domain-fanqiang-server",
"type": "remote",
"format": "source",
"url": "https://your-domain.com/domain-fanqiang-server.json",
"download_detour": "out-direct"
},
{
"tag": "domain-proxy",
"type": "remote",
"format": "source",
"url": "https://your-domain.com/domain-proxy.json",
"download_detour": "out-direct"
},
{
"tag": "domain-direct",
"type": "remote",
"format": "source",
"url": "https://your-domain.com/domain-direct.json",
"download_detour": "out-direct"
},
{
"tag": "ip-direct",
"type": "remote",
"format": "source",
"url": "https://your-domain.com/ip-direct.json",
"download_detour": "out-direct"
},
{
// sing-box 首次运行需能下载规则文件,github 在国内被阻
// 通过 https://ghp.ci/ 中转下载,如果此域名被墙,就需要更换
"tag": "geoip-cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geoip/raw/refs/heads/rule-set/geoip-cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-geolocation-cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-geolocation-cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-geolocation-!cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-geolocation-!cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-gfw",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/Toperlock/sing-box-geosite/raw/refs/heads/main/rule/gfw.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-ai",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/DustinWin/ruleset_geodata/raw/refs/heads/sing-box-ruleset-compatible/ai.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-category-ads-all",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/category-ads-all.srs",
"update_interval": "10d",
"download_detour": "out-direct"
}
],
// 不在上面的规则中的流量,走代理
"final": "out-proxy",
"find_process": true,
"auto_detect_interface": true
},
"experimental": {
"cache_file": {
"enabled": true,
// 规则集的缓存文件,改成实际路径
"path": "zz_/cache.db",
"store_rdrc": true
},
// 使用与 clash 兼容的控制面板
"clash_api": {
// 浏览器中打开控制面板的地址
"external_controller": "127.0.0.1:9090",
// ui 文件夹的名字
"external_ui": "ui",
// 指定 sing-box 下载控制面板的网址
"external_ui_download_url": "https://github.com/MetaCubeX/Yacd-meta/archive/gh-pages.zip",
// sing-box 下载控制面板相关文件时,出站流量走代理
"external_ui_download_detour": "out-proxy",
// 控制面板中的默认的科学上网方式是本配置文件中定义的规则
"default_mode": "rule"
}
}
}
本配置文件中自定义规则的示例
ip-direct.json
{
"version": 1,
"rules": [
{
"ip_cidr": [
"98.76.54.32",
"10.98.76.54"
]
}
]
}
package_name-proxy.json
{
"version": 1,
"rules": [
{
"package_name": [
"com.google.android.youtube",
"com.android.vending",
"org.telegram.messenger",
"org.telegram.plus",
"com.google.android.googlequicksearchbox",
"app.rvx.android.youtube",
"com.mudvod.video",
"com.fox2code.mmm",
"com.twitter.android"
]
}
]
}
process_name-direct.json
例子中是 Windows 中可执行文件的名字
{
"version": 1,
"rules": [
{
"process_name": [
"MEGAsync.exe",
"claws-mail.exe",
"WeChat.exe",
"TencentMeeting.exe"
]
}
]
}
process_name-proxy.json
{
"version": 1,
"rules": [
{
"process_name": [
"Dropbox.exe",
"DropboxUpdate.exe"
]
}
]
}
site-direct.json
{
"version": 1,
"rules": [
{
"domain_suffix": [
"icloudnative.io"
]
}
]
}
site-fanqiang-server.json
{
"version": 1,
"rules": [
{
"domain_suffix": [
"your-fanqiang-domain.com",
"edcba.com"
]
}
]
}
site-proxy.json
{
"version": 1,
"rules": [
{
"domain_suffix": [
"mega.nz"
]
}
]
}
通过控制面板查看流量走向,切换科学上网方式
按照本文配置正常运行 sing-box 后,浏览器打开 127.0.0.1:9090
就可以打开兼容 clash 的控制面板
-
Overview 概况
可查看上传、下载使用的流量
-
Conns (Connections) 连接
可查看规则集的使用情况,调试时很有用
-
Config 配置
通常用于切换科学上网模式。切换方法:
-
选择
Mode
(科学上网模式): Direct, Rule, GLobal- Direct 直连
- Rule,按配置文件中定义的规则
- Global 全部走代理
-
Reload 重载
点击
Reload config file
(重样载入配置文件)
-
启动 sing-box 时清空日志文件
日志level 选择 debug
时,日志文件会越来越大,有二种解决办法:
-
使用
"level": "warn"
-
运行 sing-box 的脚本文件中加入清空日志的代码
指定日志文件大于 700 KB时就清空,Linux 风格的代码如下:
if [ $(stat --format=%s "zz_/box.log") -gt 716800 ]; then > zz_/box.log fi
相关内容
- sing-box 的高级用法,匹配进程名字分发流量
- 简单、高速、稳定的科学上网软件 overtls 安装、使用教程
- overtls + tun2proxy 实现全局科学上网,所有流量走代理
- overtls Android 手机科学上网上网教程
- 把 overtls、tun2proxy 设置成开机自动启动的系统服务
- overtls 搭配 sing-box 科学上网的方法
- sing-box 基础教程:sing-box 的配置方法和使用教程
- https://github.com/ShadowsocksR-Live/overtls
- https://github.com/softwaredownload/openwrt-fanqiang
2024-10-15
sing-box 的高级用法,匹配进程名字分发流量
按域名分发流量存在很大的问题,比如:
- 我们使用的被 GFW 屏蔽的域名列表肯定不全
- 即使指定某域名如 zzyyx.com 走代理,但浏览器页面中很可能用到其他域名,这些域名可能不走代理,这就可能暴露本机真实 IP
打开 SingBox 的网页控制面板 http://127.0.0.1:9090 可以切换科学上网的模式:直连、规则、全局,但这种方式并非最佳:
- 手动切换有些麻烦
- 可切换的模式有限
- 不够灵活。比如,切换到全局,但是我们可能不希望有些流量走代理
在 singbox 的配置文件中加上按进程分发流量,这时,一个接近完美的上网世界呈现在我们眼前
我们上网时最常用的软件是浏览器,我们可能有三种需求:直连、普通的代理、Tor,我们可以用三个不同的浏览器满足各种需求:
- 一个浏览器的流量全部直连
- 一个浏览器的流量全部走自建代理或机场代理
- 一个浏览器的流量全部走 Tor
做法很简单:
- 下载三个进程名字不同的浏览器
- 在 singbox 的配置文件中定义流量分发规则
singbox rule_set 中加上如上规则:
{
"tag": "process_name-tor",
"type": "local",
"format": "source",
"path": "conf/process_name-tor.json"
},
{
"tag": "process_name-proxy",
"type": "local",
"format": "source",
"path": "conf/process_name-proxy.json"
},
{
"tag": "process_name-direct",
"type": "local",
"format": "source",
"path": "conf/process_name-direct.json"
}
以上是三个本机配置文件,和远程配置文件的区别是,本机配置文件你修改以后,启动 singbox 或者在网页控制面板重载配置文件,会立即应用新配置,而远程配置文件则未必
-
process_name-tor.json
流量全部走 Tor 的进程名字,示例:{ "version": 1, "rules": [ { "process_name": [ "msedge.exe", "git.exe", "Dropbox.exe", "DropboxUpdate.exe", "YoutubeDownloader.exe" ] } ] }
-
process_name-proxy.json
流量全部走代理的进程名字{ "version": 1, "rules": [ { "process_name": [ "mullvadbrowser.exe", "Dropbox.exe", "DropboxUpdate.exe" ] } ] }
-
process_name-direct.json
流量全部走直连的进程名字{ "version": 1, "rules": [ { "process_name": [ "chrome.exe", "WeChat.exe", "TencentMeeting.exe" ] } ] }
以上面设置为例,运行相关代理软件后,这时,在浏览器中我们想要全局直连时就打开 Chrome 浏览器,想要全局代理就打开 Mullvad 浏览器,想要全局 Tor 时就打开 Edge 浏览器。你可以只打开一个浏览器,即使同时打开三个浏览器,三者也互不影响
上面举例的是 Windows 系统的进程名字,也就是 .exe
结尾的程序名
找到 Windows 进程名字的方法,按 Windows 键,输入软件快捷方式的名字如 mullvad
,再在显示的快捷方式图标上右键,Open file location
,继续类似操作,直到看到相关 .exe 文件名字
singbox config.json 完整配置文件
{
"log": {
"disabled": false,
"level": "debug",
"output": "box.log",
"timestamp": true
},
"dns": {
"servers": [
{
"tag": "dns_resolver-tx",
"address": "119.29.29.29",
"detour": "out-direct"
},
{
"tag": "dns-direct",
"address": "https://120.53.53.53/dns-query",
"address_resolver": "dns_resolver-tx",
"detour": "out-direct"
},
{
"tag": "dns-direct-tx",
"address": "https://120.53.53.53/dns-query",
"address_resolver": "dns_resolver-tx",
"detour": "out-direct"
},
{
"tag": "dns-direct-al",
"address": "https://223.5.5.5/dns-query",
"address_resolver": "dns_resolver-tx",
"detour": "out-direct"
},
{
"tag": "dns-proxy",
// https://coding.gs/2024/06/09/available-doh/
//"address": "https://doh.apad.pro/dns-query",
//CF
//"address": "https://162.159.36.1/dns-query",
//Open
"address": "https://208.67.222.222/dns-query",
// "IBM",
//"address": "https://149.112.112.112/dns-query",
"address_resolver": "dns_resolver-tx",
"detour": "out-proxy"
},
{
"tag": "dns-block",
"address": "rcode://refused"
}
],
"rules": [
{
"outbound": "any",
"server": "dns_resolver-tx"
},
{
"rule_set": "domain-fanqiang-server",
"server": "dns-proxy"
},
{
"clash_mode": "direct",
"server": "dns-direct"
},
{
"clash_mode": "global",
"server": "dns-proxy"
},
{
"rule_set": ["domain-tor", "domain-proxy"],
"server": "dns-proxy"
},
{
"rule_set": "geosite-dustinwin-ads",
"server": "dns-block"
},
{
"rule_set": "process_name-direct",
"server": "dns-direct"
},
{
"rule_set": ["process_name-proxy", "process_name-tor"],
"server": "dns-proxy"
},
{
"rule_set":"geosite-gfw",
"server": "dns-proxy"
},
{
"rule_set": "geosite-ai",
"server": "dns-proxy"
},
{
"rule_set": [
"geosite-cn",
"geosite-geolocation-cn"
],
"server": "dns-direct"
}
],
"strategy": "ipv4_only",
"final": "dns-proxy"
},
"ntp": {
"enabled": true,
"server": "time.apple.com",
"server_port": 123,
"interval": "30m0s",
"detour": "out-direct"
},
"inbounds": [
{
"tag": "tun-in",
"type": "tun",
"interface_name": "ff3fffb78d",
"inet4_address": "172.19.0.1/30",
"mtu": 9000,
"stack": "mixed",
"auto_route": true,
"strict_route": true,
"sniff": true
},
{
"tag": "socks-in",
"type": "socks",
"listen": "::",
"listen_port": 5319
}
],
"outbounds": [
{
"tag": "out-dns",
"type": "dns"
},
{
"tag": "out-direct",
"type": "direct"
},
{
"tag": "out-block",
"type": "block"
},
{
"tag": "out-proxy",
"type": "selector",
"outbounds": ["proxy-overtls"],
"default": "proxy-overtls"
},
{
"type": "socks",
"tag": "proxy-overtls",
"server": "127.0.0.1",
"server_port": 765,
"network": "tcp",
"udp_over_tcp": {
"enabled": false
}
},
{
"tag": "out-tor",
"type": "selector",
"outbounds": ["proxy-tor"],
"default": "proxy-tor"
},
{
"tag": "proxy-tor",
"type": "socks",
"server": "127.0.0.1",
"server_port": 9050,
"network": "tcp",
"udp_over_tcp": {
"enabled": false
}
}
],
"route": {
"rules": [
{
"type": "logical",
"mode": "or",
"rules": [
{ "protocol": "dns" },
{ "port": 53 }
],
"outbound": "out-dns"
},
{
"rule_set": "domain-fanqiang-server",
"outbound": "out-direct"
},
{
"rule_set": "ip-direct",
"outbound": "out-direct"
},
{
"clash_mode": "direct",
"outbound": "out-direct"
},
{
"clash_mode": "global",
"outbound": "out-proxy"
},
{
"rule_set": "domain-proxy",
"outbound": "out-proxy"
},
{
"rule_set": "domain-tor",
"outbound": "out-tor"
},
{
"rule_set": "process_name-proxy",
"outbound": "out-proxy"
},
{
"rule_set": "process_name-tor",
"outbound": "out-tor"
},
{
"rule_set": "process_name-direct",
"outbound": "out-direct"
},
{
"rule_set": "geosite-ai",
"outbound": "out-proxy"
},
{
"rule_set": "geosite-gfw",
"outbound": "out-proxy"
},
{
"type": "logical",
"mode": "and",
"rules": [
{
"rule_set": "geosite-geolocation-!cn"
},
{
"rule_set": "geoip-cn",
"invert": true
}
],
"outbound": "out-proxy"
},
{
"protocol": "quic",
"outbound": "out-block"
},
{
"inbound": "socks-in",
"outbound": "out-proxy"
},
{
"rule_set": [
"geosite-cn",
"geosite-geolocation-cn",
"geoip-cn"
],
"outbound": "out-direct"
},
{
"ip_is_private": true,
"outbound": "out-direct"
}
],
"rule_set": [
{
"tag": "process_name-tor",
"type": "local",
"format": "source",
"path": "conf/process_name-tor.json"
},
{
"tag": "process_name-proxy",
"type": "local",
"format": "source",
"path": "conf/process_name-proxy.json"
},
{
"tag": "process_name-direct",
"type": "local",
"format": "source",
"path": "conf/process_name-direct.json"
},
{
"tag": "domain-fanqiang-server",
"type": "local",
"format": "source",
"path": "conf/domain-fanqiang-server.json"
},
{
"tag": "domain-tor",
"type": "local",
"format": "source",
"path": "conf/domain-tor.json"
},
{
"tag": "domain-proxy",
"type": "local",
"format": "source",
"path": "conf/domain-proxy.json"
},
{
"tag": "ip-direct",
"type": "local",
"format": "source",
"path": "conf/ip-direct.json"
},
{
"tag": "geoip-cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geoip/raw/refs/heads/rule-set/geoip-cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-geolocation-cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-geolocation-cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-geolocation-!cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-geolocation-!cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-gfw",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/Toperlock/sing-box-geosite/raw/refs/heads/main/rule/gfw.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-cn",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-cn.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-ai",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/DustinWin/ruleset_geodata/raw/refs/heads/sing-box-ruleset-compatible/ai.srs",
"update_interval": "10d",
"download_detour": "out-direct"
},
{
"tag": "geosite-dustinwin-ads",
"type": "remote",
"format": "binary",
"url": "https://ghp.ci/https://github.com/DustinWin/ruleset_geodata/raw/refs/heads/sing-box-ruleset-compatible/ads.srs",
"update_interval": "10d",
"download_detour": "out-direct"
}
],
"final": "out-proxy",
"find_process": true,
"auto_detect_interface": true
},
"experimental": {
"cache_file": {
"enabled": true,
"path": "zz_/cache.db",
"store_rdrc": true
},
"clash_api": {
"external_controller": "127.0.0.1:9090",
"external_ui": "ui",
"external_ui_download_url": "https://ghp.ci/https://github.com/MetaCubeX/Yacd-meta/archive/gh-pages.zip",
"external_ui_download_detour": "out-direct",
"default_mode": "rule"
}
}
}
相关内容
- overtls 搭配 sing-box 科学上网的方法
- overtls + sing-box,分享一个比较完美的 sing-box 配置
- Tor 命令行 + singbox + overtls 实现匿名科学上网
2024-12-23
怎样加强上网的匿名性
即使科学上网上网了,真实的上网信息,如本机IP地址,系统语言,系统时区等等还是可能暴露
怎样检查科学上网后浏览器上网的匿名性
访问下面网站检查自己的匿名程度:
蓝灯科学上网,浏览器匿名程度测试
下图,蓝灯科学上网,Chrome浏览器,匿名程度 40%,很差:
再拉下去看,WebRTC暴露了本机IP地址:
下图,蓝灯科学上网,FireFox浏览器,开启隐私设置后WeRTC已经关闭,匿名程度高达90%:
路由器刷OpenWrt,安装shadowsocks-libev科学上网,浏览器匿名程度测试
下图,FireFox浏览器,同样设置,WeRTC已经关闭,匿名程度64%:
Chrome浏览器,匿名程度只有30%了:
防止浏览器 WebRTC 泄露本机IP地址
Chrome浏览器安装插件就可以了: WebRTC Leak Prevent:
安装以后,路由器刷OpenWrt,安装shadowsocks-libev科学上网,Chrome浏览器的匿名程度提升到了64%
FireFox浏览器关闭 WebRTC:
地址栏输入: about config
搜索:media.peerconnection.enabled
双击由true改为false,就可以彻底匿名了!
Opera浏览器安装插件:WebRTC Leak Prevent:
什么是WebRTC What is WebRTC:
WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术
WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力
WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox...)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现,W3C等组织正在制定Javascript 标准API,目前是WebRTC 1.0版本,Draft状态;另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。同时,Google也希望和致力于让WebRTC的技术成为HTML5标准之一,可见Google布局之深远
WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android
相关资源:
匿名邮箱
Tor 浏览器使用方法
Tor 命令行 + singbox + overtls 实现匿名科学上网
下载、安装 Tor 命令行版本
Windows 下建议用 scoop 自动下载、安装:
$ scoop install tor
Updating Scoop...
Scoop was updated successfully!
Installing 'tor' (0.4.8.12-14.0.1) [64bit] from 'main' bucket
Checking hash of tor-expert-bundle-windows-x86_64-14.0.1.tar.gz ... ok.
Extracting tor-expert-bundle-windows-x86_64-14.0.1.tar.gz ... done.
Running pre_install script...done.
Linking ~\scoop\apps\tor\current => ~\scoop\apps\tor\0.4.8.12-14.0.1
Creating shim for 'tor'.
Creating shim for 'tor-gencert'.
Persisting data
Persisting torrc
'tor' (0.4.8.12-14.0.1) was installed successfully!
Notes
-----
You will need to configure Tor before using, as it does not come pre-configured.
See https://tb-manual.torproject.org/ for details
sing-box 增加 Tor 相关设置
在 overtls + sing-box,分享一个比较完美的 sing-box 配置 一文的配置基础上,在 singbox 的 "outbounds" 中增加如下配置:
{
"tag": "out-tor",
"type": "selector",
"outbounds": ["proxy-tor"],
"default": "proxy-tor"
},
{
"type": "socks",
"tag": "proxy-tor",
"server": "127.0.0.1",
// 9050 是 Tor 监听的端口
"server_port": 9050,
"network": "tcp",
"udp_over_tcp": {
"enabled": false
}
}
out-tor
使用举例:
{
"clash_mode": "global",
"outbound": "out-tor"
},
Tor 命令行配置文件 torrc
增加设置
如果 Tor 命令行程序的安装目录是 ~\scoop\apps\tor\current
,那么配置文件就是:
~\scoop\apps\tor\current\torrc
在 torrc
中添加:
UseBridges 0
Socks5Proxy 127.0.0.1:765
-
UseBridges 0
我们通过 overtls 连接到 Tor 网络,因此不需要用到网桥
-
Socks5Proxy 127.0.0.1:765
765 是 overtls 监听的端口,请改为你的科学上网软件的本地 SOCKS5 代理端口。作用是告诉 Tor 客户端,无法直接连接 Tor 网络,请 Tor 客户端通过本机 overtls 监听的 765 端口(科学上网软件)科学上网,翻出去之后再连接Tor网络
现在我们使用 overtls 作为 Tor 的前置代理(Tor over VPN),这时如果 ISP 监控流量,看到的是在访问一个网站,而【看不到】Tor 流量。在这种情况下,“流量关联分析”的【难度】将提高 N 个数量级
运行方法
-
运行 overtls
-
运行 tor
可命令行执行
tor
命令行显示的日志主要如下:
-
读取配置文件
Oct 30 18:43:34.595 [notice] Read configuration file ~\scoop\apps\tor\current\torrc
-
Tor 监听在 9050 端口
Oct 30 18:43:34.611 [notice] Opening Socks listener on 127.0.0.1:9050 Oct 30 18:43:34.611 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050
-
开始连接代理服务器
Oct 30 18:43:35.000 [notice] Bootstrapped 0% (starting): Starting
-
完成连接代理服务器
Oct 30 18:43:42.000 [notice] Bootstrapped 100% (done): Done
完整的 Tor 命令行程序启动日志:
$ tor Nov 01 17:01:10.290 [notice] Tor 0.4.8.13 (git-e153e72c01315f86) running on Windows 8 [or later] with Libevent 2.1.12-stable, OpenSSL 3.0.15, Zlib 1.3.1, Liblzma N/A, Libzstd N/A and Unknown N/A as libc. Nov 01 17:01:10.290 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://support.torproject.org/faq/staying-anonymous/ Nov 01 17:01:10.321 [notice] Read configuration file "scoop\apps\tor\current\torrc". Nov 01 17:01:10.321 [notice] Opening Socks listener on 127.0.0.1:9050 Nov 01 17:01:10.321 [notice] Opened Socks listener connection (ready) on 127.0.0.1:9050 Nov 01 17:01:10.000 [notice] Parsing GEOIP IPv4 file scoop\apps\tor\current\data\geoip. Nov 01 17:01:10.000 [notice] Parsing GEOIP IPv6 file scoop\apps\tor\current\data\geoip6. Nov 01 17:01:11.000 [notice] Bootstrapped 0% (starting): Starting Nov 01 17:01:13.000 [notice] Starting with guard context "default" Nov 01 17:01:14.000 [notice] Bootstrapped 3% (conn_proxy): Connecting to proxy Nov 01 17:01:14.000 [notice] Bootstrapped 4% (conn_done_proxy): Connected to proxy Nov 01 17:01:14.000 [notice] Bootstrapped 10% (conn_done): Connected to a relay Nov 01 17:01:16.000 [notice] Bootstrapped 14% (handshake): Handshaking with a relay Nov 01 17:01:16.000 [notice] Bootstrapped 15% (handshake_done): Handshake with a relay done Nov 01 17:01:16.000 [notice] Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits Nov 01 17:01:16.000 [notice] Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits Nov 01 17:01:16.000 [notice] Bootstrapped 95% (circuit_create): Establishing a Tor circuit Nov 01 17:01:18.000 [notice] Bootstrapped 100% (done): Done
-
-
运行 sing-box
匿名上网原理解释
sing-box 接管了系统所有流量,出站规则设置为 out-tor
的流量都转发到 Tor 监听的本地端口 9050,而 Tor 又通过 overtls
监听的本地端口连接到 Tor 网络
如何避免“陷阱节点”/“蜜罐节点
修改 Tor 的配置文件,规避这些不安全国家的节点
至少需要屏蔽“大陆、香港、澳门”这三个节点
torrc 文件末尾,加入下面这行(ExcludeNodes 表示排除这些国家/地区的节点,StrictNodes 表示强制执行):
ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu} StrictNodes 1
cn中国、hk香港、mo澳门、sg新加坡、th泰国、pk巴基斯坦、by白俄罗斯、ru俄罗斯、ir伊朗、vn越南、ph菲律宾、my马来西亚、cu古巴
如果不设置 StrictNodes 1
,Tor 客户端首先也会规避 ExcludeNodes 列出的这些国家。但如果 Tor 客户端找不到可用的线路,就会去尝试位于排除列表中的节点
如果设置了 StrictNodes 1
,即使 Tor 客户端找不到可用的线路,也不会去尝试这些国家的节点
torrc 设置 Tor 出口节点国家为主要发达国家
- EntryNodes 限定只使用某些国家的节点作为【入口节点】
- ExitNodes 限定只使用某些国家的节点作为【出口节点】
Tor 出口节点国家设置为美、加等主要发达国家:
ExitNodes {us},{ca},{gb},{au},{nz},{de},{fr},{nl} StrictNodes 1
上面的国家代码分别代表:美、加、英、澳、新西兰、德、法、荷兰
重启 tor 生效
Tor 官方提示:我可以选择出口节点的所在地吗?强烈不推荐自行修改 Tor 线路。 让 Tor 选择路由会给你带来最高的安全性,修改中继节点可能会破坏你的匿名性。 如果你只想访问只在某些国家或地区提供的服务,你可能更应该去使用 VPN 而不是 Tor。 请注意,VPN 和 Tor 在隐私属性上是有区别的,但是 VPN 可以解决一些区域限制问题
Windows 平台完整的 torrc 文件
DataDirectory "C:\\Users\\<your-name>\\scoop\\apps\\tor\\current\\data"
GeoIPFile "C:\\Users\\<your-name>\\scoop\\apps\\tor\\current\\data\\geoip"
GeoIPv6File "C:\\Users\\<your-name>\\scoop\\apps\\tor\\current\\data\\geoip6"
UseBridges 0
Socks5Proxy 127.0.0.1:765
ExcludeNodes {cn},{hk},{mo},{sg},{th},{pk},{by},{ru},{ir},{vn},{ph},{my},{cu} StrictNodes 1
ExitNodes {us},{ca},{gb},{au},{nz},{de},{fr},{nl} StrictNodes 1
测试是否已经连上 Tor 网络
-
访问 https://check.torproject.org/
如果你的浏览器已经在使用 Tor 的线路,页面会出现一个【绿色】洋葱头,以及一行绿色的英文提示
Congratulations. This browser is configured to use Tor
页面还显示了出口节点的 IP 地址,如:Your IP address appears to be:
204.203.202.201
-
访问 https://www.iplocation.net/ip-lookup ,查看 IP 地址和所属地区
-
测试命令行流量是否走 Tor 网络
curl ipinfo.io
连上 Tor 网络后显示的信息类似下面:
{ "ip": "109.70.69.68", "hostname": "tor-exit.appliedprivacy.net", "city": "Vienna", "region": "Vienna", "country": "AT", "loc": "48.2085,16.3721", "org": "AS208323 Foundation for Applied Privacy", "postal": "1010", "timezone": "Europe/Vienna" }
注:有时 ipinfo.io 会拒绝访问,这时可用:
wget -q -O - ipinfo.io/ip # 只显示 IP 地址 curl icanhazip.com curl api.ipify.org curl ipecho.net/plain
Windows 设置 Tor 为系统服务(暂未成功)
以管理员身份执行命令:
# 创建服务
tor.exe --service install
# 启动服务
tor.exe --service start
# 停止服务
tor.exe --service stop
# To remove the service:
tor.exe --service stop
tor.exe --service remove
# By default, the Tor service listens on port 9050, which can be checked by the command:
netstat -aon | findstr ":9050"
我在创建 tor 服务时遇到:
Running on a Post-Win2K OS, so we'll assume that the LocalService account exists
Done with CreateService
Service installed successfully
StartService() failed : Access is denied
一个命令在 Windows terminal 运行 Tor 和 singbox
把 tor 可执行文件的快捷方式 tor 加入 PATH 环境变量中
把运行 sing-box 的脚本文件的快捷方式 singbox 加入 PATH
先在 Windows 系统安装 Msys2,再创建一个 bash 脚本文件 torsb.sh
,内容如下:
#!/bin/bash
wt -w 0 new-tab bash -c tor
wt -w 0 new-tab bash -c singbox
(如果你的 Windows 没有安装 Msys2, 可把上面的命令行改为 cmd 或 PowerShell 格式)
运行 torsb.sh
会在 Windows terminal 的两个 tab 中分别运行 tor 和 sing-box
另外,在 Windows Terminal 的 Settings 中:
When Terminal starts
设置为 Open windows from a previous session
。关闭 Terminal 时保持 Tor 和 sing-box 的运行窗口,下次打开 Terminal 时会自动恢复
Tor 浏览器集成的 tor 命令行程序测试
安装 Tor 浏览器
\Tor Browser\Browser\TorBrowser\Tor\tor.exe
就是个命令行程序\Tor Browser\Browser\TorBrowser\Data\Tor\torrc
是命令行程序配置文件
运行 Tor 命令行程序后,启动 Tor 浏览器(不连接 Tor), 浏览器无法访问任何网页
配置文件中增加 Socks5Proxy 127.0.0.1:765
后:
- 双击 tor.exe 后无法连接到 Tor 网络,启动 scoop 安装版 tor 并连上 Tor 网络后再试就可以了
- 运行 Tor 浏览器并连上 Tor 网络后,其他浏览器并不能连上 Tor 网络
官方 Tor 命令行程序不适合新手
我下载了 官方 Tor 命令行程序 Windows 版,发现目录结构比 scoop 安装版简单,需要自己手动配置。我尝试复制 scoop 安装版的 torrc 文件到其相应目录,再运行 tor.exe 还是不行。暂时放弃使用它
相关文章
- 官方 Tor 命令行程序下载
- Tor 浏览器使用方法
- Tor 命令行版本(不含浏览器捆绑)的使用指南,兼Tor技术简介
- 如何优雅地用 Tor
- 编程随想:“如何科学上网”系列:关于 Tor 的常见问题解答
- 国家地区代码 wikipedia
- How to configure Tor as service on windows?
- How to install and run the Tor service in windows
- 使用 Tor 隐匿命令行请求
- sing-box - outbound: tor
- Tor linux man page
2024-10-30
使用指纹浏览器
Tor 浏览器虽好,但是也有些小问题:
- 如果作为日常浏览器,因为没有集成去广告插件,带来不便。官方不推荐自己安装插件
- Tor 浏览器集成了 tor 命令行版本,我暂时不知如何使用 tor 命令行程序配合 sing-box
Mullvad 浏览器就是 Tor Browser 去掉了 Tor 并且集成了 Ubolock Origin 去广告插件
推荐 mullvad 配合 singbox、overtls、tor 使用
mullvad browser
-
下载地址
https://mullvad.net/zh-hans/check
It is only possible to set the Mullvad Browser as the default browser in Windows if you selected the Standard installation type
-
泄漏检测地址
https://mullvad.net/zh-hans/browser
Cromite 浏览器显示 DNS 泄漏,mullad 则没有泄漏
Mullvad 的缺点不能多开指纹,适合只需要一个指纹环境隐匿本机信息的场景
指纹浏览器评论
CNM: 指纹浏览器,用的放心的只有mullvad,但自动化什么的不方便
@xiaomingming4225 1 year ago 这个对跨境电商有用,普通用户用用brave浏览器就行,finger print检测网站就基本检测不出来了。用chrome或者Safari都能被检测出来
2024-12-13
Cromite - 基于 chromium,增强隐私性,集成 Ad block 的浏览器
浏览器使用 DNS over HTTPS (DoH) 进行安全 DNS
利用lantern 蓝灯实现浏览器自动科学上网
VPS 选择、使用教程
上外网专用 VPS 商家排名
Zgo VPS
成立于2023年4月,由几个极客爱好者组建,初衷就是成立一家高性能和高性价的VPS提供商。目前ZgoCloud拥有德国、日本两个数据中心,日本托管在Equinix机房。其中日本数据中心的所有硬件均为ZgoCloud自己购买、组装后发往机房进行上架、销售。德国数据中心是找Hetzner定制硬件,原计划开始计划销售大盘鸡,毕竟老板之一是一个PT党,但是很快就发现G口的机器根本刷不动,于是改型并接入中国优化线路跟日本一样销售高性能VPS
ZgoCloud 是23年后起之秀,国人海外运营。自它从日本发家后,机房逐步扩展至美西与欧洲。正因为它是后起之秀,目前看机房的解锁都非常漂亮,本人已经冲了3台预售款,1台周年庆款,用来落地解锁真是爽
详细测试一下zgocloud家无优化线路,洛杉矶12.9刀机器,看看都有哪些优缺点, 机器硬件中规中矩,线路电信较差,移动联通可用。IP解锁很漂亮,这是这个机器的最大价值,速度能跑起来的就直连,跑不起来就落地,反正不浪费
IP非常纯净,用ChatGPT不会被降智,Claude不容易被封号
xia0sheng: 我个人觉得还是ip关系最大,用机场ip,不管多么冷门的,都不会只有你一个人在用这个ip,所以买vps,自己搭建吧,这样至少可以保证这个ip只有你在用
我在他们比较推荐zgo的vps,说ip比较干净
dmit zgo的ip都可以 开全局 实在不行看我的直连教程
美西zgo的ip质量还行
ip用的是zgo的,稳定的虽然是机房ip
zgo这个新商家之前听过,国人商家,日本也是v.ps的下游,因为面板和v.ps家一模一样,曾经被一度以为是V.PS的李鬼,刚好那段时候正是v.ps被打的时候 ... 一个账号只能退款2次,流量超10g不退,push账号不退,活动鸡不退,超5天不退
zgo商家是国人品牌,优点是机子性能比较硬(相对于搬瓦工),IP比较干净,适合落地解锁各类流媒体;缺点是23年才成立,比较新
ZgoCloud在六月遭受了一波CC攻击和部分客户的实例被破解成肉鸡大量占用带宽暴力发包,所以商家开启了防欺诈认证。在注册ZgoCloud账号时不要开启代理和VPN,注册信息、地址、电话和使用的注册使用的IP(精确到国家即可)一致基本就可以通过欺诈测试
注意zgocloud开启防欺诈,请下单的环境:
- 下单前请清空缓存和cookie;
- 清空代理,不开启魔法,使用真实上网环境;
- 如果遇到无法支付,系统砍单的情况,可以提交工单给客服,让客服重新打开invoice后再付款
PayPal (付款时,注册账户的邮箱与填写的信息要和 PayPal 保持一致,否则会认定欺诈)
ZgoCloud使用的是VirtFusion虚拟化管理面板,在购买之后需要手动进入到VirtFusion面板中自行安装系统,可以在安装系统时选择打开VNC、使用IPV6、设置密钥登录等,如果不使用密钥登录的话,默认root密码会发送到注册的邮箱里
在购买产品时让写的root密码只是 whmcs 计费面板的要求,实际真正的root密码/密钥是VirtFusion发送到邮箱的那个
支持信用卡、支付宝付款,Paypal 默认不支持,要用的话需要联系客服
购买 Zgocloud 服务后,如果发现 IP 被封锁,您可以在购买后 3 小时内申请更换。三个小时后,该 IP 被视为没有问题,并接受此协议。
您每月可以更改一次 IP,每个 VPS 最多可以申请 3 次 IP,每种情况我们收取 5 美元,并且仅适用于 IPv4 更改
【备战黑五减少踩坑】云服务器厂商实力、DNS、CDN和线路等服务的分级排名和选择建议
(个人根据网友口碑或经验作不严谨排名,请大佬轻拍 :tieba_087: 会根据评论动态调整)
云服务器、VDS 或 VPS 的分级排名和特色优势:
一线:aws gcp az
二线:oracle dmit(可注册tt) ovh bandwagon netcup hetzner linode vultr
三线:zgo(ip干净可注册claude) bagevm racknerd crunchbits misaka sharon sakura
四线:akile alice halo claw cloudcone
灵车:rapidroot virmach
神级:cloudflare(docker serverless正在开发;另外可以看看fastly)
DNS:面向境内用华为,面向境外用cloudflare
延迟:跨境延迟,除了专线(?),阿里云香港bgp精品线路最快最稳。想要优惠选:阿里云香港,绿云香港。
CDN:面向境内且无需备案的CDN有:az cdn > fastly > cloudflare;面向境外选 cloudflare
避坑:不要在腾讯注册域名,封你(各级)域名不讲理
VPS 评论
@dreamideal5121: 踩了无数坑的来分享经验了,线路固然有用也好,但是还是得看稳定性(玄学),举个例子我买的akkcloud的gia依旧被瓦工jpsb干的满地乱爬,个人建议选取小鸡请根据商家黑历史--->线路--->买一个月体验稳定性依次筛选来定下自己的小鸡。个人使用过的推荐的vmiss,瓦工,akkcloud(便宜gia依旧够强,去程9929回程gia,nps内网穿透稳定行比前俩高)。 我所有鸡的udp口都挂了,外网互连可以,国内到鸡不通,这个是不是因为开会原因导致被干了(今天原神国际服都没登上去)
黑名单:recknerd(便宜是真便宜,粪是真的粪),pigyun(网段有人搞事给我ip也连坐了,而且本身也确实一般般),还有更多但是懒得记因为不配被记住,选鸡不如选个好网,换个几乎联通解决一切问题
三七 sanqi: netcup 是比较大的云服务商,稳定性有保障
netcup 的1欧元每月的小鸡,简称1o,位于德国:de:
1核E5,1G内存,30G固态,无限流量,1000M带宽
综合起来性价比很高,缺点是线路差,距离远
但对北京联通用户不错
rn是racknerd的简称,是一个近几年主打性价比的厂商 他们位于 洛杉矶DC02机房的vps对中国大陆的连通性不错,有一定优化 网络速度较好,大多数地区能跑到 10MB - 20MB的速度 只推荐 dc02 机房的vps,其他的网络线路不好,很卡很难用 他们家最有性价比的就是每年黑色星期五闪购限量机 我今年就抢到了一台 你可以上论坛上(nodeseek之类的)去溢价收一台闪购机 当然也可以直接买还在搞活动的vps 下面是 dc02 机房最便宜的两款(带AFF) 如果下单的话记得一定要选 洛杉矶 DC02 机房!
rn 相对稳定(在这个价位),是很多人包括我,上手的第一台vps
netcup 更稳定,但是内存只有1G,且购买也比较麻烦
看你对内存的需求了
稳定是很重要的一点,不稳定出现问题(比如商家跑路)导致的时间成本也需在选购时考虑
自己搭梯优先选线路好延迟低速度快以及ip没有被墙的,解锁什么的可以通过套落地或者套DNS解锁,速度慢可没得救
rn的ip都挺脏的,而且ip情况不止和你用的情况有关,还和你的邻居(同用一个ip段的)有关 如果你的邻居干不干净的事,你的ip风险也会上升、解锁也可能变差,因为云服务商蛮多时候是买一整个ip段下来再进一步分配(分给主机、再转卖给下游的主机商),因此有些厂商(甚至GFW)在ip段内很多ip都干不干净事的时候会把整个ip段拉黑
rn的vps很卡,不建议购买,超售严重
DMIT
DMIT的CMIN2 三网都ok 电信的话可以考虑CN2GIA,但dmit的ip不行,需要自己加落地分流
dmit 搞个顶级优化玩玩,从追求便宜到追求稳定 三网,CN2GIA(电信),和三网CMIN2(移动)优化回程路线 建站扶墙两不误,每间隔15天可免费更换一次IP
HK节点可以套warp解锁gpt,3x-ui面板直接有路由规则 US节点目前我是用racknerd的垃圾vps套cf优选域名,延迟比中转机场高点,但备用没什么问题
dmit 不用想 瓦工不思进取,硬件比dmit低不说,ipv6也没有。更重要的是换ip超级贵,dmit免费。瓦工唯一比dmit好就是ip相对干净点(就一点)。瓦工plan还有个好处就是可以切机房。之前hk85性价比很高,自从爪云横空出世,香港区嘎嘎乱杀
你要稍微稳定点的三网优化的美西机子的话就瓦工或者dmit 瓦工的话46那款,剩余价值随便收 dmit的好处就是cpu强很多,换9554的zen4的amd 瓦工46的1核512M内存10G硬盘 500G流量,不过能切机房,除了美西gia还有澳洲荷兰9929,日本软银,不够没香港hk85的cmi dmit还行15天免费换ip,瓦工要8刀一次 不过正常建站和协议好点的话一般不会被墙的
1T用量 自建一个更合适 DMIT美西CMIN2 电信可以买GIA。用Warp解锁一下流媒体,或者买dns或者落地鸡。CMIN2单线程限速200M,GIA贵些。 平日用可以买个流量低的机场日常用hk。
美西要稳定还要性价比只推荐dmit,他家出问题会早早发公告让人心安
线路是你的IDC提供的 你没得选 你只能选优质线路的IDC 比如DMIT 搬瓦工
瓦工theplan感觉除了能搬机房玩,其实跟dmit比没性价比
洛杉矶地区因其 线路优化效果良好 且 价格相对便宜,成为用户的热门选择,尤其是有扶墙需求的用户,通常会优先考虑这一地区的产品
科学上网:如果追求性价比,推荐选择 洛杉矶 LAX.Pro / LAX.EB 系列 ,这两种方案在价格与性能之间达到了较好的平衡。年付 36.9 或 49.9 美元的价格也不贵。如果对延迟有更高要求,则建议优先考虑 香港 HKG.Pro 和 HKG.EB 系列,其连接速度更快,适合对网络质量敏感的应用场景。
建站需求:对于有建站需求的用户,推荐选择带有 DDoS 保护 的 洛杉矶 LAX.sPro 系列 ,能更好地抵御网络攻击,保障网站的稳定运行。考虑到价格因素,退而求其次选择年付100$的 LAX.Pro.PalmSpring 也是不错的选择。
DMIT 提供 3 天内全额退款或 30 天内剩余价值退款,退款是无理由的。但全额退款需符合购买不超过3天且流量不得超过30GB,否则会以剩余价值退款; 使用 PayPal 支付,申请退款会扣手续费,手续费用大概 2.5 美元左右,使用支付宝付款的用户无需支付手续费; IP 被墙免费换,基本规则为每 15 天可更换一次,或付费 5 美元一次随时更换;
DMIT 的 36.9 美元套餐和 39.9 美元套餐主要区别在于流量和线路:
36.9 美元:500GB 流量,三网 CN2 GIA,适合电信用户,延迟低,稳定性强。 39.9 美元:1000GB 流量,三网 CMIN2,更适合移动用户,流量充足
相关内容
购买 ZgoCloud VPS 手把手教程
为什么选择 Zgo VPS
它的优点:
IP 质量高
国人为什么购买海外 VPS,我不说大家也心知肚明。特别是现在 AI 兴起,连接到海外的 IP 的质量很重要
因为 Zgo 是国人做的,本来我有些犹豫,但是禁不住它的 IP 质量高,果断把在其他家的 VPS 全部转移到了 Zgo
关于这点,我必须表扬 Zgo 的创始人,他们知道中国用户最需要的是什么。这是聪明人的表现,这样的人做什么事情都相对容易成功
同样配置价格很有竞争力
我算了一下,现在我用于购买 VPS 的费用节省了一半以上
下面我详细说一下购买 Zgo VPS 的步骤
注册 Zgo VPS 的注意事项
首先,当然得在 Zgo VPS 注册账户。点开页面后,右上角可以登录或注册
Zgo 开启了反欺诈系统,注册时不要使用 VPN 或代理
可以不实名,但是不能瞎写,比如姓名写 AAA,地址写 BBB,这样就太露骨了
如果很介意真实信息,地址可以写学校,公园等公共地址,电话必须是格式正确的 11 位中国手机号码。基本上地址、电话、和 IP 三者所属地理位置一致,就可以通过防欺诈测试
购买 Zgo VPS 的步骤
Place New Order
在 https://clients.zgovps.com/ 页面,点击 Place New Order
如果你想要美国西部的机房,就选 Los Angeles 开头的产品。这是离中国最近的美国机房位置,如果我们经常要用到美国的服务如 YouTube,ChatGPT 等,一般选择这个机房
如果想要中国线路优化的配置,可看产品介绍:
- CN2GIA 中国电信线路优化
- 9929 中国联通线路优化
- CMIN2 中国移动线路优化
如果页面显示 CN2GIA&9929&CMIN2 这就是所谓的 三网都优化。中国线路优化的产品相对会贵一些,也更抢手
付款可选信用卡和支付宝,一般选择支付宝
点击页面左上角的 Dashbod 来到产品管理首页
页面显示了你购买的产品列表,点击左侧你刚购买的产品名称
点击页面中的 Access Control Panel 以打开 VPS 控制面板
再点击 Click here to access Control Panel
Welcome Back 页面,登录控制面板
- Email address 填写注册邮箱
- Password 填写密码
- 点击 Login 按钮登录
然后可能会出现一个 404 NOT FOUND 页面,后退一下就可以了
来到 VPS 管理后台
点击页面右下角的 Manage (管理)
来到 Server Setup... 服务器设置页面
-
Name 名字,方便你区分多个 VPS
-
Hostname 可不填
-
Timezone 时区,选择你所购买的 VPS 所在地的城市
-
Operating system 操作系统,建议选 Ubuntu
选择最新的 Ubuntu 版本:
-
Add key 添加 SSH 登录 VPS 的公钥
如果你是新手,这里可以不设置,这样的话你可以用发到你邮箱的登录密码 ssh 登录 VPS
如果你熟悉 ssh 操作,建议先在本机生成公钥和私钥,再添加进去
-
Virtal Network Computing (PNC) 不用管,因为以后也可以设置
-
IPv4 public DNS Resolvers 可保持默认
检查并确认上面的设置,最后点击页面下方的 Install with... 开始安装你选择的操作系统
最后来到安装完成后的 VPS 管理后台
-
Boot 启动
-
Shutdown 关机
-
Restart 重启
-
Power Off 关闭电源
-
Rebuild 重建
就是本文过程再来一遍,如果VPS 里有重要数据,就要非常小心
还可以查看 VPS 的状态
接下来你就可以从命令行用密码登录 VPS 或者用 ssh 公钥直接登录 VPS
相关内容
2024-12-22
ZgoCloud VPS ssh 命令行设置新手教程
本文的测试环境为 Ubuntu 24.4
下面说一下我是如何通过 ssh 命令行初始化设置 Zgo VPS 的,希望对你有帮助
先用密码或公钥的方式以 root 用户 ssh 登录 VPS
检测 Zgo VPS IP 质量
- 运行如下命令检测 IP 综合质量
bash <(curl -Ls IP.Check.Place)
我前几天刚买的 Zgo VPS 检测结果如下图:
可见该 IP 的风险极低,主流网站如 YouTube, ChatGPT 都原生解锁
- 流媒体解锁检测
这是另一个 IP 质量检测脚本,着重检测流媒体
bash <(curl -L -s media.ispvps.com)
结果如下图:
可见,检测结果和前面的类似
添加新用户
我们第一次 ssh 登录 VPS 时用的是 root 用户身份,为了安全起见,以后不宜用 root 登录,现在就添加一个新用户
## 增加新用户 zzyyx
adduser zzyyx
# 会让你输入密码
# 把新用户加入到 sudo 组,以后就可以用 sudo 临时获取 root 用户同样的权限
usermod --append --groups sudo zzyyx
# 看一下 sudo 组的成员
getent group sudo
以后将用 zzyyx 的身份登录 ssh,在此之前,我们还要为 zzyyc 设置 ssh 公钥
设置 zzyyx 的 ssh 登录公钥
如果已经在购买 VPS 时设置了公钥,这个公钥是属于 root 用户的,zzyyx 并不能直接用来免密码登录 VPS
cd /home/zzyyx
# 把公钥复制到 zzyyx 自己的目录下
cp -r /root/.ssh .
# 把目录和文件所属的用户和组设为 zzyyx
chown -R zzyyx:zzyyx .
先不要退出此 ssh 连接,在本机以 zzyyx 用公钥兔密码直接登录 ssh 测试一下
把原 VPS 的相关文件、数据迁移到 Zgo VPS
一般情况下,别家 VPS 的价格可能比 Zgo VPS 高,我们买了 Zgo VPS 后,很可能关掉在别家的 VPS,在此之前要做文件、数据的搬家工作
具体方法详见 VPS 搬家,传送文件的方法: sudocp
设置 Nginx 网站服务器
sudo apt update
sudo apt upgrade
sudo apt install nginx
sudo ufw app list
# 开放 Nginx 要用到的端口
sudo ufw allow 'Nginx Full'
# 查看 Nginx 的状态
sudo systemctl status nginx
自动申请通配符 wildcard 域名 https 免费证书,并自动续期
TCP 网络优化,提速
sudo su
wget https://raw.githubusercontent.com/yeahwu/v2ray-wss/main/tcp-window.sh && bash tcp-window.sh
# 会自动重启
访问外网实际体验 IP 质量和网络速度
用 VPS 的 IP 代理上网,观看 https://www.youtube.com 如果 IP 质量低,会需要你登录观看
访问国外知识 AI 网站,看看有什么限制
相关内容
2024-12-22
用 ZgoCloud VPS 代理 IP 注册 gmail
哪里买域名性价比最高
-
name.com
价格适中,转出域名很方便,立即完成
-
SpaceShip.com
域名转入后,会自动设置原来的 name server。不支持 .name 域名转入
-
Godaddy
.com 域名续费约 $22,抢钱一样贵。域名转出要好几天
远山出海笔记: 2024 年哪里买域名最便宜?
哪个后缀的域名最便宜?
小众的后缀相对便宜点,比如 .xyz 、 .link 、.website 、.life 、.world、.live、.shop、.site 、.online 等等首年大多1~2$刀的价格,但是之后续费就贵了,大都超过了12$刀
如果遇上域名商促销,可以一次续费多年且便宜的,这样的还是可以买着玩玩
就我个人用过的域名而言,.top算是便宜后缀了,首年和续费价格约35RMB块
相对主流的域名后缀,价格大都很稳定。com,net的价格各大厂商价格几乎都过了10$刀,均价80多块人民币
哪个平台的域名最便宜?
主流的厂商(以com为例):
Spaceship,是Namecheap 旗下新兴的域名注册商,价格约8$,到24年底价格已赶上CloudFlare
以及以CDN出名的CloudFlare价格约9.7$
其他如之前便宜的日本互联网巨头GMO旗下z站等等在23年底后均以涨价至10$以上
上面便宜的域名商缺点是主要客户非国内用户,仅支持海外信用卡、PayPal,不能用支付宝
NameSilo,Dynadot不是最便宜的,自认为是最好用的
以上均以续费价格为主,如果只购买一年或临时短期用,也可以看看GoDaddy,Namecheap,首年com可能不到5$刀
对于建站新手来说,挑选合适域名注册商需要考虑很多方面,以前曾做过一个域名比价网,长期来看域名价格浮动并不大,在这里只选取主流的几家如GoDaddy,Namecheap,NameSilo,Dynadot,Google,CloudFlare,Porkbun等注册商为例,介绍他们各自的优势以及价格信息。当然大域名商不止这些,了解一些就够用
2024下半年海外域名平台注册/续费价格,支付方式对比
域名商 | 首年价格 | 续费价格 | 免费 | 支付方式 |
---|---|---|---|---|
Spaceship | $8.48 | $9.98 | whois | 信用卡,PayPal, 支付宝 |
CloudFlare | $10.44 | $10.44 | whois | 信用卡,PayPal |
Dynadot | $12.99 | $12.99 | whois,mail | 信用卡,PayPal, ApplePay, 支付宝 |
Porkbun | $7.49 | $11.06 | whois | 信用卡,PayPal, 支付宝 |
NameSilo | $13.95 | $13.95 | whois,mail | 信用卡,PayPal, 银联, 支付宝等 |
Name | $10.99 | $12.99 | 收费 | 信用卡,PayPal |
Namecheap | $9.58 | $13.98 | whois | 信用卡,PayPal, 比特币等 |
GoDaddy | $5 | $15-$20 | whoi? | 信用卡,PayPal, 支付宝等多种 |
Register | $25 | $20 | 收费 | 信用卡,PayPal |
上表中
- Godaddy whois: free for Limited Privacy will show some contact info for this domain, including the Registrant Organization, State/Province and Country. No other contact details will be shown
- whois: 免费 Whois 隐私保护
- mail: 免费企业邮箱
另:
- NameSilo 提供有限免费企业邮箱
- Dynado 买域名送等注册时长的域名邮箱
常用国外域名注册商购买网址:
以下几家是海外知名的域名注册商,根据商家的口碑、解析稳定,加上价格的比较,支付的便捷。推荐的还是Namesilo,Dynadot,cloudflare,便于国人支付的是Namesilo,Dynadot,porkbun
-
Namesilo: https://www.namesilo.com/
2024年后由于.com后缀涨价原因,买.com后缀不再首推NameSilo,但NameSilo其他后缀的价格还是具有性价比
NameSilo的新用户1美元优惠码,一搜一大把,如:newvipcode , qcy , QCYH , 9zhe , qczk , 2024code。NameSilo很少有其他促销,
目前的规则是仅新账号可以使用一次折扣,如果支付时使用code没有减免,可能你的账号已经超过最大使用次数
NameSilo一个字形容,稳。2009年成立的美国域名注册 商,ICANN认证商家之一。价格亲民,没有过多费用套路,新注册和续费价格浮动不大,而且赠送永久隐私保护,提供有限免费企业邮箱
NameSilo在2021年以前的价格大多在$8.95每年(近8年来续费价格没有改变),续费也是首年价。只在2021,2022年度内,上调过两次,每次1美金。 另外,支持多种支付方式,国际信用卡,银联,支付宝等
我的域名也大都在NameSilo购买 ,NameSilo有多稳呢,尽管在2020年,他们的网站做了改版,但也只是首页,加购,支付等页面,用户登入后的个人面板依然是多年前的风格,好处是老用户操作方便
2023五月更:2023年5月下旬已经做了改版,个人中心页面做了变动,文末有Namesilo最新注册过程链接
-
Dynadot: https://www.dynadot.com/zh/
Dynadot是一家老牌美国域名注册商,网站支持简体中文,域名注册价格便宜,免费Whoi隐私保护,也是个不错的选择。他家主要提供域名注册竞拍,主机托管等业务。特色业务是到期域名的抢注上,在抢注过期域名更容易获得成功。此外,Dynadot的用户面板做的是真不错
偶尔翻看邮箱发现,Dynadot会在国内节假日发送中文促销邮件,足以说明对国内用户的重视,开始路转粉
2023年6月份后,Dynadot.com官网可能打不开,如访问打不开时将com后缀改成cn后缀,即访问: dynadot.cn
-
Porkbun: https://porkbun.com/
Porkbun,猪肉包域名商,是近几年刚成立的域名注册平台,为了扩展市场,前几年常有低价域名出售,最低曾低至1美元首年,现在价格已经赶上了同行域名商
随着用户数的增加,价格上涨也是很多平台的普遍现象。同样的价格,但是稳定性相对差些,我在这注册的域名,遇到过购买支付小问题以及解析遇到大小写没生效,这两年应该好多了
Porkbun官方购买优惠折扣码:AWESOMENESS
-
CloudFlare: https://www.cloudflare.com/
CloudFlare Domains是CloudFlare旗下的域名注册平台,注册后点击左侧左侧菜单栏 Domain Registration,即可注册域名
使用CloudFlare需注意,CloudFlare注册的域名不支持DNS更换 (大部分域名不用更换DNS)
在域名方面,主要有注册和转注两类业务。CloudFlare 通过内置的 DNS、CDN 和 DDoS 攻击防御来保护和加速个人网站业务出众,被全球用户广泛使用
为了开拓市场,定价良心,并且赠送免费Whoi隐私保护,稳定安全,也是个不错的选择
顺便说一句,CloudFlare 的CDN火遍全球,是外贸型网站的基础设置之一,但是由于CF在国内没有边缘节点,所以国内网站较少使用 由于官网部分页面在国内已屏蔽,国内访问官网时,可能会自动跳转至https://www.cloudflare-cn.com
-
Spaceship: https://www.spaceship.com/
Spaceship,宇宙飞船,很酷的名字。这个域名价格不会便宜,兜兜转转这么多年最终被Namecheap买下用作域名注册商子品牌,由于是2019年后创建的新品牌,目前域名价格也是大的注册商里最便宜的,缺点是国内购买支付不方便
-
Godaddy: https://www.godaddy.com/
GoDaddy,狗爹,宇宙最大域名注册商,域名市场占有率超过50%。网站的域名种类应该也是全球最齐全的,也是全宇宙最不可能跑路的域名商,支持简体中文,国内访问时会自动跳转至新加坡子目录,而且还支持中文客服电话,可预约回电
王者狗爹从域名注册申请,域名查询,域名买卖交易,域名转移,虚拟主机,VPS服务器,SSL证书,网站安全防护,企业邮箱,网站建设等等你能想到的它全干了
狗爹价格不亲民因此不大推荐。以com为例,首年价格在$5美金左右,如果购买隐私保护,一年多出大概80块,而这在别家大都免费哦,并且续费会涨价,域名价格区间在15-20美金左右,当然了,庞大用户基数,免不了很多老用户愿意买单
-
Namecheap: https://www.namecheap.com/
Namecheap ,老牌域名注册服务商,同时提供主机、SSL证书等业务。NameCheap相对显得中规中矩,安全性、稳定性,隐私保护免费,客服支持都较好,用户口碑也较好。 缺点是Namecheap支付不方便
以上几家是海外知名的域名注册商,根据商家的口碑、解析稳定、以及安全系数,加上价格的比较,支付的便捷。推荐的还是 Namesilo, Dynadot 以及 CloudFlare
此外还有一些首年域名免费的注册商,由于此类域名价格采用首年免费,以后续费费用较高的套路,因此不再介绍和推荐
出处:https://shannote.com/archives/buy-foreign-domains.html
CloudFlare
免费SSL和CDN,不可改DNS服务器, 需另付费
Cloudflare 与2018年9月27日官方博客宣布推出域名注册服务,承诺只收取成本费,不赚取利润。
Cloudflare 的最大特点是没有推销,没有促销套路。以往的域名服务商总是在给你推销额外的服务,什么隐私服务、SSL证书等。还经常搞第一年超低价,续费恢复原价,其实算下来一点都不便宜。
而Cloudflare就承诺永远不会收取TLD批发价格之外的任何费用,第一年是这样,以后每年续费也都是一个价
CF 优点:
具有出色的网站性能优化和网络安全能力
免费提供高级DNS解析服务
用户界面简洁友好,注册过程流畅
提供免费SSL证书
价格合理且透明化
CF 缺点:
需要使用Cloudflare的DNS服务
缺少一些高级域名管理功能
客户支持服务有待加强
出处:兔哥博客
Cloudflare也顶不住了,它家也要涨价了 2024 年 9 月 1 日起(On September 1 2024 .COM registrations/renewals/transfers will change from $9.77 to $10.44)
.COM域名的价格从$9.77涨价到 $10.44涨价了 $0.67
By 蔡任弘
-
Cloudflare 只是 com 域名便宜,其它后缀没有价格优势
-
所有的域名注册商都允许更改域名服务器地址,但 Cloudflare 却不可以。如果你愿意忍受这一限制,那它是一个不错的域名注册选择
-
Cloudflare 禁止新注册域名 60 天内转移到其它注册商,该规则与 ICANN 执行的规则并不完全相同,因为 ICANN 仅在 WHOIS 联系信息被修改时才禁止转移
-
如果你想使用其它反向代理服务,则必须把域名从 Cloudflare 转出,期间要等两个月
SpaceShip
https://spaceship.com
supported TLDs https://www.spaceship.com/domain-search/?tab=pricing&query=
免费 WHOIS 隐私,免费CDN加速
spaceship上买了两个com域名,一个用了优惠码2.88刀,一个67折5.几刀。续费的话9.98$+0.18$。支持支付宝RMB结账,实时汇率的 namecheap续费超级贵,所以没在上面买贵的域名,有一个sooai.site,就这域名还要23刀
开门见山,网上能搜索到域名注册比较便宜的是spaceship,续费和转入比较便宜的是WP(土区)。 说一个关键,土区注册的 # #续费是259TL ,汇率54CNY。这个渠道是比价网站搜索不到的
paceship注册是最便宜,WP的续费和转移会便宜。号区域错误,原生区域要对
转到spaceship,支持支付宝 转移$8.17 续费$10.16
.com spaceship 第一年带上优惠码是5.6$
spaceship 几乎是续费最低(据说还有0.6u一年六位纯数字xyz活动,续费同价)
还提供免费域名隐私保护:
https://www.spaceship.com/zh/domains/domain-name-privacy/
2024-12-16:
If I transfer my domains to spaceship, do they automatically get domain privacy protection?
If Domain Privacy is applicable to the TLD you want to transfer, it will be automatically applied by the end of the domain transfer
TLD: A top-level domain (TLD) is the last part of a domain name, such as .com, .org, or .net, and it helps classify the type of website.
Domain Privacy is applicable and included for most gTLDs and some ccTLDs with Spaceship
Due to registry restrictions, Domain Privacy cannot be used with the following TLDs :
.co.uk
.us
.ca
.abogado
.ad
.co.in
.eu
.gg
.in
.je
.law
.me.uk
.nyc
.org.uk
.to
.uk
For the rest of the TLDs, Domain Privacy is included for free, you may check the TLDs you are interested in yourself at https://www.spaceship.com/domains/
Please use the "Domain Privacy" filter.
最近频频听说账号风控的事情。播客开篇提到的我另一篇播客就是被风控的情况,有些人甚至需要上传护照才可以注册账号。有些人更是在购买了域名之后,被取消域名注册资格的情况。
在这里,我建议大家,首先注册账号不要挂代理。而且促销代码一个账号仅仅可以使用一次。如果你想通过注册第二个账号来使用促销代码降低价格,那么请你查看一下我开头的那篇博客,可能会对你有帮助。
by 兔哥博客
Clancy Wang:
- porkbun 经常搞活动,续费价格普遍低,支持支付宝(推荐)
- namesilo 隔三差五搞跳水活动(比如去年com注册1u),支持支付宝
- dynadot 注册/续费低价,支持支付宝,支持中文,买域名送等注册时长的域名邮箱。官方为了方便中国用户访问还专门开了cn站
- namecheap 经常搞活动,首年注册还行,续费偏贵。涉政,敏感勿入
- spaceship 几乎是续费最低(据说还有0.6u一年六位纯数字xyz活动,续费同价)(推荐)
- name.com 5 比较正经的大公司,活动比较多,0.9一年六位纯数字xyz,支持支付宝(价格小贵,但靠谱)
- regery.com 1 可以注册不少小众国别域(价格正常;部分需要KYC!!),支持支付宝
- GoDaddy 俗称狗跌,:dog:都不用。价格不透明、客服乱要权限、官网被墙,难用的一批。用过一次再也不想用了
促销码列表:https://zh-hans.tld-list.com/优惠码 5
注册价格排名:https://tld-list.com 6 、哪煮米 5
whois查询:https://who.cx/ 1
如果没有特殊需求建议等黑五,或者找zhiyang佬c几个玩玩(小心号被扬了)
HsiangSun
- namesilo 6 不收税,首年和续费基本同价
- name 5 有些后缀域名比较便宜
- godaddy 8 ,最全,各种域名都能买,首年有些域名有优惠
2024-10-30
VPS 搬家,传送文件的方法: sudocp
原来有一个 VPS,新买了一个 VPS,怎么把重要文件、数据从原 VPS 传送到新 VPS?这里介绍一个很好的 bash 脚本工具 sudocp
服务器之间不需要相互访问。要复制的文件不会写入任一服务器上的临时文件,也不会写入运行脚本的计算机上
例子
sudoscp from to /home/usrName/public /etc/overtls/config.json
Enter Password:
/home/usrName/public
/etc/overtls/config.json
上面示例中传送了一个目录、一个文件
运行 sudocp 命令行后,会让你输入两个 VPS 的相同 sudo 密码,然后后就会在屏幕上显示传送成功的文件的路径
在 ~/.ssh/config
中定义二个 Host
,示例:
Host from
HostName 192.191.190.189
User loginName
Port 22
IdentityFile path/to/rsa
Host to
HostName 154.153.152.151
User loginName
Port 22
IdentityFile path/to/rsa
IdentitiesOnly yes
from
代旧原先的 VPS, to
代表新的 VPS
loginName
是你 ssh 登录 VPS 的用户名,两个 VPS 可以不同
Windows 下安装 Msys2 也可以运行这个 bash 脚本
使用前提条件
- 两台服务器都需要通过无密码 ssh(使用公钥认证)进行访问
- 两台服务器都需要安装 tar 和 sudo
- 两台服务器的 sudo 密码需要相同
There you go! If there's anything else you need, feel free to ask!
About
sudoscp is a short script to allow copying files that are not readable or writable by your user between machines where you have sudo access but don't have access to log in as root over ssh. The servers does not need to be able to reach each other. The files to copy are not written to temporary files on either servers nor on the box the script is running from. Example
sudoscp server1.example.com server2.example.com /tmp/myfile /tmp/myfile2 Enter Password: /tmp/myfile /tmp/myfile2
Prereq Both servers need to be accessible by passwordless ssh (using public key auth). Both servers need to have tar and sudo installed. The sudo password needs to be the same on both servers
相关内容
2024-12-22
Nginx 设置小权限 user,提高 VPS 安全性
本文内容测试环境为 Ubuntu 24.04
/etc/nginx/nginx.conf
的第一行通常为:
user www-data;
Linux 系统中,不同用户是独立的,可能无权读写对方的目录和文件
如果以用户名 zyx
登录 VPS,这时,Nginx 不能读写 zyx 的文件,zyx 也不能读写 www-data 的文件
如果我们把网页静态文件放在自己的用户目录下,Nginx 因为缺少读写权限,网站就可能显示 404 Not found
解决办法:
## 增加最小权限的用户 nginx
sudo adduser --system --no-create-home --shell /bin/false --group --disabled-login nginx
# 把 nginx 加到 zyx 组,这样 nginx 就有权限读写 zyx 的路径
sudo usermod --append --groups zyx nginx
# 修改 Nginx 配置文件
vi /etc/nginx/nginx.conf
# replace "user www-data;" to:
user nginx nginx;
# 使修改生效
sudo nginx -s reload
参考
2024-12-21
VPS IP 质量检测
-
IP 类型检测 https://ipinfo.io
- type
- isp: 住宅 IP
- hosting or businiss: 机房 IP
- type
-
IP 风险评分 https://scamalytics.com/ip
分数越低越好,50 以下为好
-
本机 IP 安全、匿名性检测 https://whoer.net/
-
查询 本机 IP https://www.iplocation.net/ip-lookup
-
IP 质量综合检测脚本 https://github.com/xykt/IPQuality
ssh 登录服务器,管理员权限运行命令:
bash <(curl -Ls IP.Check.Place)
可能需要安装相关依赖
-
流媒体解锁检测
bash <(curl -L -s media.ispvps.com)
自动申请通配符 wildcard 域名 HTTPS 免费证书,并自动续期
本文内容测试环境为 Ubuntu 24.04
使用通配符 wildcard 域名 HTTPS/TLS/SSL 证书的好处是:
- 一个证书通用于主域名如
zzyyx.com
和所有的*.zzyyx.com
子域名 - 任何时候你添加一个子域名,都不用再次手动申请证书
要注意的是,通过类似下面的手动模式和 DNS 验证来申请通配符 HTTPS/TLS/SSL 证书,后续续期也需要手动完成:
sudo certbot --nginx -d "*.zzyyx" -d zzyyx.name --register-unsafely-without-email --manual --preferred-challenges dns
手动续期自然是比较麻烦的,本文讲一种自动申请 HTTPS/TLS/SSL 通配符免费证书并自动续期的方法
注册、申请 Digital Ocean 的 DNS API token
当然,你的域名要用 Digital Ocean 的控制面板进行解析
把得到的 DNS token 保存在 VPS 上,如 path/to/do.conf
,内容类似下面:
dns_digitalocean_token=6666666666666666666555555555555555555444444444444433333333322222
运行命令申请通配符 https 免费加密证书
sudo apt install certbot python3-certbot-nginx python3-certbot-dns-digitalocean
sudo certbot --dns-digitalocean --dns-digitalocean-credentials path/to/do.conf --dns-digitalocean-propagation-seconds 120 --installer nginx -d *.zzyyx.com -d zzyyx.com --agree-tos --register-unsafely-without-email
有几点需要注意:
- 一个命令申请一个域名的 wildcard https 加密证书
- 如果让 certbot 安装证书到 Nginx 配置文件,会让你选择要安装的域名,要正确选择
如果不需要 certbot 安装证书,就移除命令中的 -i
(install) 选项并加上 certonly
子命令:
sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials path/to/do.conf --dns-digitalocean-propagation-seconds 120 -d *.zzyyx.com -d zzyyx.com --agree-tos --register-unsafely-without-email
子命令 certonly
表示 Obtain or renew a certificate, but do not install it
手动安装 HTTPS 证书到 Niginx 域名配置文件的示例
实际上,我们第一次让 certbot 帮我们安装证书到 Nginx 网站配置文件里,以后就可以按照范例自己修改配置文件,特别是域名较多的情况下这样更加方便
server {
server_name zzyyx.com;
listen [::]:443 ssl http2; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/zzyyx.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/zzyyx.com/privkey.pem; # managed by Certbot
#ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host ~ ^[^.]+\.software-download\.name$) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name zzyyx.com;
}
上面带 # managed by Certbot
行就是 certbot 安装的
如果你有了 HTTPS 证书,希望 certbot 帮你代劳安装,那么可以运行下面命令:
certbot install --cert-name zzyyx.com
按照本文方法成功申请 HTTPS/TLS/SSL 加密证书的域名,以后 certbot 会自动帮我们续期
2024-12-21
VPS 中国线路三网优化之 CN2 GIA,AS9929,CMI
电信 ChinaNet
-
ChinaNet 也叫 163 骨干网,AS4134)
ip 以 202.97 开头. 定位于承载普通质量的互联网业务, 基建早, 带宽大, 便宜
CN2 AS4809,CN2 分为 CN2 G T和 CN2 GIA
ChinaNet Next Carrier Network 之后由中国电信发展的下一代承载网, ip以59.43开头. CN2 相比较 163 网络, 带宽小, 稳定高速
-
CN2 GT(ChinaNet Next Carrier Network Global Transit 半程走 CN2)
CN2中端产品, 本身接入网络是 ChinaNet(AS4134), 省级骨干走163(去程和回程都会出现202.97节点), 出口才走 CN2(AS4809)。
-
CN2 GIA (ChinaNet Next Carrier Networ Global Internet Access全程走 CN2)
CN2高端线路, 本身接入网络 CN2(AS4809),出口也是 CN2(AS4809)。 部分未部署CN2 节点的省份城市, 会经163(202.97)然后接入CN2节点。CN2 GIA(Global Internet Access)的价格比CN2 CT(Global Transit)高出约3倍。
联通
- AS4837 (联通 169 网络) 民用骨干网, 定位相当于163. 回程走海联通AS4837称之为 CU VIP.
- AS9929 (联通A网, CU PM), 定位相当于CN2, 更像CN2 GT, 服务于政企大客户. AS9929的价格比AS4837贵5倍以上. 和电信的GIA差距还很大(炸起来的时候完全没法用).
- AS10099 (联通国际出口, CUG). 联通出国 可能是AS4837直接出国, 或 内地AS4837/AS9929, 出境接入AS10099.
移动
- CMI (China Mobile International Limited,CMI移动自己的国际出口, AS58453-AS9808) 一般回国有Qos限速(可加钱可升级保证国内带宽) 晚高峰可能会炸
- CMCB (移动商宽) 国际出口高Qos等级特权
大体上的排名: CN2 GIA >> AS9929/CN2 GT >> 163/AS4837
出海赚钱教程
做 YouTube 赚钱,账号设置
一般情况注册好gmail后会自带一个频道,但不推荐直接使用这个频道,因为该频道的资料是跟谷歌信息关联的,不方便后续的资料更改
YouTube的中国大陆区不支持开通获利,通常都是写香港或者美国。Adsense是国内常住地址就行了
Adsense
注意这里的地区是指youtube频道地区,改为香港才能有获利功能。但是我们的adsense账户后台仍然是中国的,不影响正常收款结算
美区Adsense账户主要需要解决两个问题:美国银行账户和美国地址
风控和地址验证
- 确保你的地址能收到PIN码:其实很简单,淘宝上有不少提供收PIN码的服务。
- 账户风控需要提供地址证明:可以使用水电账单、银行账单等作为地址证明
老猫建议:在准备地址证明时,尽量选择与开户地址一致的文件,这样可以减少银行审核时的麻烦。如果是通过第三方服务购买的地址,确保提供的文件看起来尽可能真实,其实注册一个美国公司其实也是不错的选择,这个回头再给大家分享吧.
填写所在国家或地区
填写所在的国家或地区时,一定不能乱填。如果填写中国,PIN码也会发到中国大陆且只能绑定中国大陆银行;如果是中国香港或者海外国家,PIN码则寄到对应地区或国家。国家或地区一旦确认,将无法更改!
注册AdSense帐号时选择的国家/地区很重要,选定后就不能再更改,为了收款方便注册地区请选美国或香港。
另外要有真实的美国/香港地址用来接收信件,当你的账户收益达到10美金时,谷歌会给你邮寄一封纸质的信件,里面有PIN码,用于验证账户地址安全,验证通过后才能正常提现。如果你没有在美国的朋友能帮忙代收的话,可以到某宝上花点钱找代收服务。
无论是国号还是非国号的Adsense账户,收款账户都需要与Adsense的国家地区对应。如果你使用香港账户,就需要填写香港的银行信息;如果是美国账户,就需要填写美国的银行信息
创建付款资料
这部分主要填写个人地址等信息,这部分可以填写代收人信息,不一定填写自己的资料。账户类型有「个人」或「企业」,二者唯一的差别仅在「个人帐户」是用帐户持有人的收款人姓名收款,「企业帐户」则以公司名义收款。
备注:官方不允许一个人拥有2个AdSense,因此建议一个浏览器不要同时存在2个AdSense,否则容易引起不必要的麻烦。
接下来我们要注册Payoneer(派安盈)来绑定AdSense收款,再兑换成人民币提现到国内银行卡。做跨境的都知道派安盈了,不占用每年5W额度。 派安盈成立于2005年,总部在美国纽约,服务覆盖200多个国家地区,支持150+币种,支持绝大多数跨境电商以及海外平台收款。
收款方法
收款很简单,US账户一般注册checking账户就可以了,收款只需要路由号码(Routing number) ,和你的账户 (Account number).
使用第三方支付平台
三方收款平台进行收款结汇,会给你你的虚拟美国银行助力你的跨境业务,当然他们会收你一些手续费,一般0.5%-1.2%不等.
- PingPongX:专注于跨境电商的支付解决方案,支持多种收款方式,适合电商卖家。
- 派安盈(Payoneer):全球知名的跨境支付平台,支持多种货币结算,适合需要灵活转账的用户。
- 连连国际:提供全球支付解决方案,支持多种收款方式,适合有多种收款需求的用户。
如果觉得直接开设美国银行账户比较麻烦,还可以选择使用第三方支付平台。这些平台会为你提供虚拟美国银行账户,帮助你进行跨境业务
Payoneer派安盈注册
确保都真实准确,请用英文字母填写。(公司名称按拼音写就行,比如:上海小米科技有限公司:Shang hai xiao mi ke ji you xian gong si )
地址要精确到门牌号,按中文顺序用拼音来写,无需翻译成英文
最后再填写下用于提现的国内银行卡信息,提交后应该会收到2封邮件,一封是验证电子邮件,另一封是上传身份证照片,用手机拍照提交后等待审核,一般2天内通过。 通过后它就会分配给我们一些各个国家货币的银行账号,如果没看到银行账号,请点击“收款”里的“申请账户”按钮,可能要填个简单的服务问卷。 找到USD美国账号,点击“查看详情”就能看到卡号等信息。
然后将账号和路由ABA等信息复制到Google AdSense后台的“添加付款方式”里,保存后跳转新页面选择“通过测试存款进行验证”,完成绑定即可收款
如果是香港的AdSense账号,可以联系客服申请一个香港收款账户,用来收港币打款
@Ginahua-gq9qz 1 year ago 美区的adsense,税务表填写需要增加一个证明,证明你不在美国居住,税务表是可以审核通过的,但是在你的账户余额达到最低打款的时候,需要验证身份,跟客服沟通过,没有办法使用国内的身份证验证,也就是你的身份证与adsense账户里的国家不一致,不能通过验证!账户里的余额还不能转移到新账户
@imkerberos 3 months ago 最后给播主出个招,旅游去国外,办一个离岸的账户,adsense 收到境外个人账号里,就轻松转到境内。
2024-12-23
OpenWrt + shadowsocks-libev 实现路由器自动科学上网
相信经过前面的教程,大家对OpenWrt和Linux Ubuntu有一定的熟悉了。如果还不熟悉Ubuntu,就安装Ubuntu,实际使用一个月
前面的文章都是技术准备,有基础的读者可以略过。在本章中,我们要OpenWrt路由器安装 shadowsocks-libev来实践科学上网
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
什么是shadowsocks-libev科学上网软件
shadowsocks-libev 是一个 shadowsocks 协议的轻量级实现,是 shadowsocks-android, shadowsocks-ios 以及 shadowsocks-openwrt 的上游项目。其具有以下特点:
- 体积小巧。静态编译并打包后只有 100 KB
- 高并发。基于 libev 实现的异步 I/O,以及基于线程池的异步 DNS,同时连接数可上万
- 低资源占用。几乎不占用 CPU 资源,服务器端内存占用一般在 3MB 左右
- 跨平台。适用于所有常见硬件平台,已测试通过的包括 x86,ARM 和 MIPS。也适用于大部分 POSIX 的操作系统或平台,包括 Linux,OS X 和 Cygwin 等
- 协议及配置兼容。完全兼容 shadowsocks 协议,且兼容标准实现中的 JSON 风格配置文件,可与任意实现的 shadowsocks 客户端或服务端搭配使用
shadowsocks-libev 包括服务端和客户端两部分,一共三个模块
- ss-server:服务器端,部署在远程服务器,提供 shadowsocks 服务
- ss-local:客户端,提供本地 socks5 协议代理
- ss-redir:客户端,提供本地透明代理,需要与 iptables NAT 表配合使用
- ss-tunnel: 客户端,本地端口转发
相关资源:
科学上网软件Shadowsocks-libev服务端设置
要利用 shadowsocks-libev科学上网,首先要有一台国外的服务器安装并运行shadowsocks 服务端。如果还没有服务器,可以到 Zgo VPS 购买一台 IP 质量较高的 SSD 虚拟服务器VPS,全SSD硬盘,速度极快
Ubuntu安装 shadowsocks-libev服务端
for Debian 9("Stretch"), unstable, Ubuntu 16.10 and later derivatives:
sudo apt-get update
sudo apt-get install shadowsocks-libev
for other versions:
#Add GPG public key:
wget -O- http://shadowsocks.org/debian/1D27208A.gpg | sudo apt-key add -
# Ubuntu 14.04 or above
sudo add-apt-repository "deb http://shadowsocks.org/ubuntu trusty main"
# Debian Wheezy, Ubuntu 12.04 or any distribution with libssl > 1.0.1
sudo add-apt-repository "deb http://shadowsocks.org/debian wheezy main"
sudo apt-get update
sudo apt-get install shadowsocks-libev
Ubuntu 16.10上确认shadows-libev已经运行:
sudo systemctl status shadowsocks-libev
上述命令的效果:
- 安装ss-local ss-redir ss-server ss-tunnel...到 /usr/bin
- 启动文件 /etc/init.d/shadowsocks-libev
- 配置文件 /etc/shadowsocks-libev/config.json (旧版是/etc/shadowsocks/config.json)
- 一些默认启动配置 /etc/default/shadowsocks-libev (旧版是/etc/default/shadowsocks)
编辑shadowsocks-libev配置文件
sudo vi /etc/shadowsocks-libev/config.json
改成类似如下:
{
"server":["[::0]","0.0.0.0"],
"server_port":1098,
"password":"killgfw",
"method":"chacha20-ietf-poly1305",
"ipv6_first":true,
"dns_ipv6":true,
"fast_open":true,
"timeout":600
}
简要解释如下:
-
"server":["[::0]","0.0.0.0"]
监听本机IPv6和IPv4地址
-
"server_port":1098
shadowsocks-libev 服务端 ss-server 监听的端口
-
"password":"killgfw"
shadowsocks-libev客户端加密通信的密码,有以下几个要求:
- shadowsocks服务端和客户端密码必须一致
- 密码长度不少于6位
-
"method":"chacha20-ietf-poly1305"
加密算法,详见 Shodowsocks不同加密算法的区别
-
"fast_open":true
一种加速数据传送的优化,必须要设置好才能启用这个选项。如果没有设置过,值先改成 false
防火墙 ufw 设置
ufw 是Ubuntu设置防火墙的工具,查看 ufw 是否已经启用:
sudo systemctl status ufw
在 Zgo VPS 创建 VPS 后,如果没有启用 ufw,可以这样启用:
sudo ufw enable
启用了ufw以后,那么要用如下命令开放server_port,注意把下面的1098换成你的实际端口:
sudo ufw allow 1098
查看 ufw 状态
sudo ufw status
查看 ss-server 监听的端口:
netstat -lnp
你可以给 ss-server 启动参数加上或去掉 -u
运行 netstat 命令看看区别
给 shadowsocks-libev 创建 ufw profile
我们也可以换一种方式开放 1098 端口 给 shadowsocks-libev 服务端 ss-server
$ cd /etc/ufw/applications.d/
$ sudo vi shadowsocks
# add lines
[shadowsocks-libev]
title=shadowsocks-libev
description=shadowsocks-libev server
ports=1098/udp|1098/tcp
然后我们可以这样给shadowsocks-libev添加防火墙规则:
$ sudo ufw allow shadowsocks-libev
Rule added
Rule added (v6)
$ sudo ufw status verbose | grep 1098
1098/udp (shadowsocks-libev) ALLOW IN Anywhere
1098/tcp (shadowsocks-libev) ALLOW IN Anywhere
1098/udp (shadowsocks-libev (v6)) ALLOW IN Anywhere (v6)
1098/tcp (shadowsocks-libev (v6)) ALLOW IN Anywhere (v6)
更加清楚地显示了谁监听在什么端口
如果前面已经运行了 sudo ufw allow 1098
可以这样删除重复规则:
sudo ufw delete allow 1098
再用 netstat 命令查看一下 shadowsocks-libev 监听的端口:
$ sudo netstat -lnp | grep ss-server
tcp 0 0 0.0.0.0:1098 0.0.0.0:* LISTEN 2414/ss-server
tcp6 0 0 :::1098 :::* LISTEN 2414/ss-server
udp 0 0 0.0.0.0:1098 0.0.0.0:* 2414/ss-server
udp6 0 0 :::1098 :::* 2414/ss-server
控制shadowsocks-libev的方法
在Ubuntu 16.10上安装shadows-libev后,默认已经随机启动了
sudo service shadowsocks-libev restart
sudo service shadowsocks-libev start
sudo service shadowsocks-libev stop
查看ss-server是否已经启动并且带有 -u启动参数
ps ax | grep ss-server
如果启动正常,返回结果类似如下:
/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -u
注意其中有-u。如果shadowsocks客户端启用了udp relay, 而服务端启动时不带-u参数,科学上网自然就失败了
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/ubuntu/etc/shadowsocks-libev
- https://github.com/shadowsocks/shadowsocks-libev
- https://xwvut.software-download.name/
OpenWrt路由器运行 shadowsocks-libev ss-local 客户端
shadowsocks-libev for OpenWrt 要和 OpenWrt 版本一致,否则可能无法安装,或者安装了不能启动
shadowsocks-libev选择 OpenSSL 版还是 PolarSSL 版
根据依赖的 SSL 库可分为 OpenSSL 和 PolarSSL 两种版本OpenSSL 版依赖 libopenssl, 支持加密方式多, 体积大 PolarSSL 版依赖 libpolarssl, 体积小, 加密方式少
如果内存大就选OpenSSL版,反之则选PolarSSL版
安装shadowsocks-libev客户端到OpenWrt路由器(星号替换成实际的字符)
~/Downloads$ scp shadowsocks-libev-polarssl_*_ar71xx.ipk root@192.168.1.1:/tmp/
~/Downloads$ ssh root@192.168.1.1
root@OpenWrt:~# cd /tmp
root@OpenWrt:~# opkg install shadowsocks-libev-polarssl_1.*.*_ar71xx.ipk
修改shadowsocks-libev客户端配置
root@OpenWrt:~# vi /etc/shadowsocks-libev/config.json
改成类似如下:
{
"server":"1.0.9.8",
"server_port":1098,
"local_port":7654,
"password":"killgfw",
"method": "chacha20-ietf-poly1305"
}
注意,server IP必须修改你的实际IP。其他可以保持默认
shadowsocks代理上网测试
-
启动shadowsocks 客户端:
root@OpenWrt:~# ss-local -c /etc/shadowsocks-libev/config.json
-
Ubuntu浏览器代理上网设置,以FireFox配合AutoProxy为例,增加Proxy Server, Proxy Host填192.168.1.1,Port是7654, 勾选Sock5.如下图:
Ubuntu设置AutoProxy的默认代理是shadowsocks,就可以打开被墙的网站如YouTube.com
Windows 电脑使用 shadowsocks-libev 客户端 ss-local 科学上网的方法见下面链接:
https://xwvut.software-download.name/ebook/04.8.html
以前我在每台电脑上都运行一个shadowsocks客户端,每台电脑都要像上面这样配置浏览器代理上网科学上网。但是还是太复杂,如果家里有十台上网设备,所有要连国外网站的软件都可能要配置代理访问,有些软件还根本没有设置代理的接口。有没有更简单的方法呢?
现在路由器里安装了shadowsocks,所有有线和无线上网设备都不用分别安装shadowsocks了,非常方便
相关资源:
史上最通俗易懂的OpenWrt科学上网路由器解释
什么是域名和IP地址
每个网站都可以有两个唯一标识:域名和IP地址。域名相当于人的名字,IP地址相当于该人使用的电话号码。(不同之处:域名是唯一的,人的名字会有重名)
网站为什么要有两个标识?域名是为了方便人类记忆的,比如YouTube.com,而电脑处理却喜欢处理数字,纯数字格式的IP地址就是为了让电脑查找计算方便些
通过域名查询IP的那些事情
我们在浏览器地址栏里输入 www.youtube.com 并回车,到底会发生哪些不可思议的事情呢:
- 浏览器问就近的某台电脑(叫域名服务器):Hi, youtube.com的IP地址是什么?
- 域名服务器:不就是 74.125.239.98
- 浏览器:谢谢。我就到你给我的地址去找内容了
还有种情况,浏览器第一次问的域名服务器不知道某域名的IP地址:
- 浏览器问就近的域名服务器:Hi, youtube.com的IP地址是什么?
- 域名服务器:这个我不知道哇,我帮你问问我的上线
- 上线服务器:我也不知道哇,我也只好问我的上线,等等,别挂掉
- 某域名服务器:这么简单还来问我,不就是 74.125.239.98
- 浏览器:谢谢。我就到你给我的地址 74.125.239.98 去找内容
白脸很忙,不看YouTube(看不懂?)
在中国,YouTube为什么被封?YouTube有几千万,上亿个视频,如果某几个视频让某些人看了不爽,就来个宁可错杀百万,不可放过一个,把整个YouTube给封了,全国人民都无法正常访问YouTube了
这个时候,又发生了哪些不可告人的事情呢?
- 浏览器问就近的域名服务器:喂, youtube.com的IP地址是什么?
- 中国的某域名服务器:这我知道,44.44.44.44,(心里嘀咕,我给你的是太平洋海底的地址,你能找到内容才怪呢,白脸(领导)很忙,天朝很好,访问这种破网站干啥,满屏洋文,我怎么看得懂,哼)
- 浏览器:谢谢。我这就去找主人需要的内容。。。找了好久,还是什么也没找到,我的命怎么这么苦。。
阳光底下,每时每刻每秒,这样龌龊的事情在发生千次,万次,亿次...
深刻理解 TCP UPD 通信协议
UDP是什么意思:
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17 UDP协议全称是用户数据报协议[1] ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议 与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据
缺点就是优点,UDP通信效更高:
既然 UDP 数据发送之后,是无法得知其是否安全完整到达的,那么为什么 在 shodowsocks 中还要用 UDP 呢?不用校验数据是否完整,数据传递的速度自然更快。所以在游戏界,基于 UDP 协议的网络通信又被称作高性能网络。联机游戏要在服务端和客户端之间传递大量数据,对通信要效率要很求很高,因此多用 UDP
UDP的数据可能不完整,这限制了 UDP 协议的用途,更多的地方用的是 TCP 协议。但是也有例外,QQ 就是采用 UDP 协议通信的。一般来说即时通信适合用 TCP,腾讯在 UDP 的基础上进行了高度的封装、优化,使之一定程度兼具 TCP UDP 两者的优点
UDP 最常见的用途是 DNS 查询。我们打开一个网页,会有多次的 DNS 查询动作,在进行 DNS 查询的时候,通信流量默认就是走 UDP 协议。DNS 规范中包含了 TCP 协议,但是 TCP 只是一种备选方案,很多公共 DNS 查询提供商并不提供 TCP 查询的接口
Shadowsocks 是一个优秀的 Socks 代理工具,在很长的一段时间里它仅支持 TCP 代理,后来在 Shadowsocks-libev 上实现了 UDP 转发的功能,然后我们才能在 shadowsocks 客户端把 DNS 查询请求转发到 shadowsocks 服务端,由服务端把查询到的数据返回到客户端,这就避免了 GFW 的域名污染
shadowsocks 如果使用 TCP 协议转发域名查询请求到服务端,客户端和服务端的通信会被 GFW 直接重置
太阳要升起,网民要雄起
但是,还有问题没有解决:
网站有两种,国内的和国外的。如果不分国内国外全部都到国外去查询域名的IP,访问国内的网站就会变慢。虽然有心逃离,还是无法割断哪
有几种解决方案:
-
建国外重要网站名单,简称外单(黑名单,gfwlist),外单上的域名都到国外去查询IP,其他就在国内查询
如果IP地址在外单上,就加密访问,领导不知道我访问了这个地址,这样领导的心情可能会好些
-
同样是建立外单。不同的是,我不想花费精力去区分某个IP是不是在外单上,IP地址可能经常在变,这样做不怕累吗。我的办法是,不是中国的IP,全部加密访问
-
每个人的用途不同,谁有本事建立通用的外单?
即使有人建立了包含很多域名的外单,网站内容往往是互相引用的,某外单上网站引用了不在外单上的被封网站,导致打网站贼慢,这个该怎么办?难道要手动查看网页源代码,一个个地搜索查找,逐个测试?
最简单有交的方法,是给国内重要网站建立名单,简称内单。内单上的网站都在国内dns,其他网站全部到国外dns。访问非中国的IP都流量加密
我曾经用过第一种方案,试图用网友整理的外单(ChinaDNS),但是,在实际使用过程中,经常需要临时增加外单域名并重启路由器,有时一天要重复好多次,不胜其烦.
第三种方案,就是本教程使用的方案,是目前来说比较好的方案
OpenWrt科学上网路由器内部发生的故事(千万别告诉白脸):
- 浏览器:喂,谁知道YouTube.com的IP,主人要用
- 路由器:稍等,我查下主人设置的内单,稍等。。。不在内单,我通过秘密通道查
- 浏览器:喂,告诉我baidu.com的IP
- 路由器:哇,内单,马上就给你
- 浏览器:请给我IP地址60.188.5.6的内容
- 路由器:等下,立即就好。。。中国IP,该那就那去取内容。不是中国IP,借道主人的秘密通道去取内容
相关资源:
配置 OpenWrt shadowsocks 路由器智能自动科学上网
OpenWrt路由器用dnsmasq转发国内重要域名查询
OpenWrt默认自带dnsmasq,我们只要配置一下就好了。ssh登录OpenWrt路由器后:
-
建立dnsmasq.d目录:
root@OpenWrt:~# mkdir /etc/dnsmasq.d root@OpenWrt:~# echo "conf-dir=/etc/dnsmasq.d" >> /etc/dnsmasq.conf
-
OpenWrt安装GNU wget以支持https下载,下载国内重要网站名单,用国内域名服务器查询iP地址
root@OpenWrt:~# cd /etc/dnsmasq.d root@OpenWrt:/etc/dnsmasq.d# opkg install wget root@OpenWrt:/etc/dnsmasq.d# 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 root@OpenWrt:/etc/dnsmasq.d# 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
注:accelerated-domains.china.conf 文件中的条目举例:
server=/10010.com/114.114.114.114 server=/115.com/114.114.114.114
意思是,访问10010.com这个结尾的域名时,dnsmasq会转发到国内的域名服务器114.114.114.114进行dns查询
gfwlist.conf: 其他域名,转发到shdowsocks-libev ss-tunnel指定的端口dns查询
root@OpenWrt:/etc/dnsmasq.d# echo "server=/#/127.0.0.1#3210" > gfwlist.conf
上面 # 是通配符,代表泛匹配所有域名。dnsmasq匹配域名的特点是详细特征优先匹配,因此会先匹配accelerated-domains.china.conf 上的域名,如果不匹配,再匹配这条规则:转发到本地端口3210进行域名查询
后面我们会配置shdowsocks-libev的本地客户端ss-tunnel转发本地端口3210的查询到远程自建服务器
配置shdowsocks本地客户端ss-redir启动和停止函数
root@OpenWrt:/etc/dnsmasq.d# vi /etc/init.d/shadowsocks
#!/bin/sh /etc/rc.common
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Last Update: 2018-09-27
START=95
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
echo 'server=/#/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 /etc/shadowsocks-libev/config.json -f /var/run/shadowsocks.pid -u
service_start /usr/bin/ss-tunnel -b 0.0.0.0 -c /etc/shadowsocks-libev/config.json -l 3210 -L 8.8.4.4:53 -u
/usr/bin/ss-firewall-asia
#/usr/bin/ss-firewall-global
#/usr/bin/ss-firewall-china
}
stop() {
echo 'server=/#/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
service_stop /usr/bin/obfs-local
killall ss-redir
killall ss-tunnel
killall obfs-local
/etc/init.d/firewall restart
}
shadowsocks本地客户端配置文件start stop函数说明:
-
echo 'server=/#/114.114.114.114' > /etc/dnsmasq.d/gfwlist.conf
停止shadowsocks科学上网服务时,要把泛匹配域名的解析转发到国内的dns服务器,这里是114
原来用的是 sed 替换字符串的方法, 有几次发现 gfwlist.conf 被意外清空,导致科学上网失,败原因不理,。现改用 echo 清空文件并添加字符串的方法后,即使 gfwlist.conf 内容被清除,也能在重启 shadowsocks 后重新写入
-
echo 'server=/#/114.114.114.114' > /etc/dnsmasq.d/gfwlist.conf
开启科学上网服务时,如果以前停止过shadowsocks科学上网服务,确保泛匹配域名的解析通过ss-tunnel 3210端口转发
-
service_start /usr/bin/ss-tunnel -b 0.0.0.0 -c /etc/shadowsocks-libev/config.json -l 3210 -L 8.8.4.4:53 -u
监听本地3210端口,转发到自己的服务器的53端口向8.8.4.4查询DNS
-
dnsmasq只是负责域名查询分配转发,查询到IP地址后,是否需要通过shdowsocks加密请求内容,要在ss-firewall-...里进行设置
三个
/usr/bin/ss-firewall-...
启用其中一个浏览外网时建议启用
/usr/bin/ss-firewall-global
全局科学上网,既节省了路由器的计算资源,又避免一些意想不到的问题 -
运行
/etc/init.d/shadowsocks stop
有时并没有结束ss-redir 或ss-tunnel进程这会导致修改
shadowsocks.conf
后需要重启路由器才能生效。加上killall
强制杀掉进程避免重启。(2016-01-19) (注:即使加了 killall,有时还是不能杀掉进程,这种情况就只能重启路由器了。也就是说,修改了科学上网配置,有时必须重启路由器才能生效) -
ss-redir 加上 -u 参数
据tefiszx的建议:
-
youtube目前使用quic,udp协议是首选,目前路由器的ss配合iptables只能转发tcp流量,最新版的youtube的app会出现断流,而网页端播放目前没问题(chrome必须关闭quic)
-
很多游戏的网络版都使用udp协议。目前的转发存在一定的局限性
-
在转发tcp流量的基础上增加转发upd后,ss就成为准vpn了。应用面更
-
已经找到youtube安卓客户端3秒断流的解决办法。方法如下:
- 修改/etc/init.d/shadowsocks文件,把ss-redir 加-u参数启动
- 修改/usr/bin/ss-firewall-*文件,在防火墙规则中增加一条iptables规则,将443端口的upd重定向到shadowsocks监听的端口即可
-
配置iptables防火墙转发IP和端口
root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch ss-firewall-asia
root@OpenWrt:~# chmod +x ss-firewall-asia
root@OpenWrt:~# vi ss-firewall-asia
/usr/bin/shdowsocks-firewall-asia:
#!/bin/sh
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# phoeagon tefiszx idonknown
# Last Update: 2018-10
#create new chains
iptables -t nat -N SHADOWSOCKS
iptables -t nat -N SHADOWSOCKS_WHITELIST
# Ignore your shadowsocks server-s's addresses
# It's very IMPORTANT, just be careful
# you'd better add them in an individual file
for white_ip in `cat /etc/shadowsocks-libev/ip_server.txt`;
do
iptables -t nat -A SHADOWSOCKS -d "${white_ip}" -j RETURN
done
# Ignore Custom IP list
for white_ip in `cat /etc/shadowsocks-libev/ip_custom.txt`;
do
iptables -t nat -A SHADOWSOCKS -d "${white_ip}" -j RETURN
done
# for Chrome youtube
iptables -t nat -A SHADOWSOCKS -p udp --dport 443 -j REDIRECT --to-ports 7654
# Ignore LANs to bypass the proxy
# See Wikipedia and RFC5735 for full list of reserved networks.
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
# Anything else TCP request 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
# Or ignore Asia IP address
for white_ip in `cat /etc/shadowsocks-libev/ip_asia.txt`;
do
iptables -t nat -A SHADOWSOCKS_WHITELIST -d "${white_ip}" -j MARK --set-mark 1
done
# Ignore China IP address
# See ashi009/bestroutetb for a highly optimized CHN route list.
#for white_ip in `cat /etc/shadowsocks-libev/ip_china.txt`;
#do
# iptables -t nat -A SHADOWSOCKS_WHITELIST -d "${white_ip}" -j MARK --set-mark 1
#done
OpenWrt路由器 iptables防火墙设置含义:
-
/etc/shadowsocks-libev/ip_server.txt
如果本地发出请求到shadowsocks服务端 IP,就返回,不作任何特殊处理
2018-10 起,防火墙规则中要忽略的 IP 列表分类保存到 /etc/shadowsocks-libev/ 目录下,这给我们修改带来了很大的便利。特别是你有多个VPS时,全写在 ip_server.txt 就行了
确保这几个 ip_*.txt 路由器 /etc/shadowsocks-libev 保存在目录下,否则会出错。可以到下面地址下载这几个文件:
https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/shadowsocks-libev
-
/etc/shadowsocks-libev/ip_custom.txt
自定义的忽略 IP,这个文件很有必要,比如你在电脑WIFI连接的属性中设置一个国内某个特殊DNS地址,再把这个地上加到ip_custom.txt,DNS解析速度会非常快
默认启用的是 ss-firewall-asia ,即亚洲 IP 加入白名单,这样防火墙规则简单多了,但是有些 .tw .hk 网站可能打不开,把它们的 ip 加到 ip_custom.txt 就可以打开了
-
如果本地发出请求到局域网,也立即返回
本来计划启用 ip_lan.txt,但这样做有风险,如果你忘记在路由器里放置该文件,那么将无法登录路由器,只能重新刷固件
-
/etc/shadowsocks-libev/ip_asia.txt
如果发出请求到亚洲的IP地址,也立即返回
-
剩下的IP内容请求,全部转发到shdowsocks-libev本地客户端ss-redir监听的端口,由ss-redir负责和服务端进行加密通讯。(手下报告访问youtube的屁民为个位数,白脸心里那个高兴啊。可惜经过加密,内容传输速度会有下降)
-
iptables -t nat -N SHADOWSOCKS_WHITELIST 相关行
首先运行全代理模式,然后再执行白名单。在白名单比较长时路由器冷启动的速度会比较快,如果启用了ip_china.txt,你会感觉到路由器启动速度快了好多倍。(Thanks Phoeagon)
一般不建议使用 ip_china.txt
预编译科学上网固件都带了这个文件,这个文件很长,因此配置不高的路由器DIR-505,预编译固件里应该“发出请求到亚洲的IP地址就立即返回”
每个请求都检测是否中国区IP,可能对路由器的压力较大,WNDR4300 路由器也是如此
从 2018-09 开始,默认配置启用 Ignore Asia IP address,这样路由器的压力就小得多了
如果你的路由器性能较好,可以手动启用 Ignore China IP address,并把Ignore Asia IP address段注释掉
-
iptables -t nat -A SHADOWSOCKS -p udp --dport 443 -j REDIRECT --to-ports 7654
据tefiszx建议,upd协议 443端口流量转发到shadowsocks 的本地端口,chrome 浏览器打开 youtube 可能更快
OpenWrt路由器防火墙设置重要说明:
-
你必须把上面的1.0.9.8换成你服务器真实的IP地址
-
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 7654
这里的7654
必须和OpenWrt路由器/etc/shadowsocks-libev/config.json
里的local_port
一样,也就是说,如果 /etc/shadowsocks-libev/config.json里local_port":1090
那这里的7654
也要改成1090
控制shadowsocks本地客户端的方法
root@OpenWrt:~# /etc/init.d/shadowsocks start
root@OpenWrt:~# /etc/init.d/shadowsocks enable
root@OpenWrt:~# /etc/init.d/shadowsocks stop
root@OpenWrt:~# /etc/init.d/shadowsocks disable
说明:
- enable: 设置shadowsocks在OpenWrt路由器启动时自动启动
- start: 运行shadowsocks
- stop: 停止shdowsocks
- disable: 取消shadowsocks随机启动
启动并测试shadowsocks-libev本地客户端
确保所有设置无误后,可以启动测试一下:
root@OpenWrt:~# /etc/init.d/dnsmasq restart
root@OpenWrt:~# /etc/init.d/shadowsocks enable
root@OpenWrt:~# /etc/init.d/shadowsocks stop
root@OpenWrt:~# /etc/init.d/shadowsocks start
然后在Ubuntu电脑,手机等设备上打开youtube.com,twitter.com
下载配置文件的最新版
git clone https://github.com/softwaredownload/openwrt-fanqiang
git clone 项目到本地后,可以进入 openwrt目录查看文件
如果所有设置都正确,应该可以较快速度打开被墙网站
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/shadowsocks-libev
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/usr/bin
- https://xwvut.software-download.name/
OpenWrt自动更新设置和屏蔽广告
OpenWrt路由器自动更新国内重要网站名单
登录路由器后:
root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch chinalist
root@OpenWrt:~# chmod +x chinalist
root@OpenWrt:~# vi chinalist
#!/bin/sh
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
wget -4 --no-check-certificate -O /etc/dnsmasq.d/apple.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/apple.china.conf
wget -4 --no-check-certificate -O /etc/dnsmasq.d/google.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/google.china.conf
accelerated-domains.china.conf 内容越来越多了,可能会影响路由器的运行速度。这个文件其实应该分拆成二个:
- accelerated-domains.china.master.conf - accelerated-domains.china.slave.conf
master.conf 包含国内权重最高的个几千个网站,每个路由器可以使用这个文件 slave.cof 包含国内权重不太高的网站,性能不高的路由器可以不使用这个文件
如果你的路由器性能不高,建议不要经常更新accelerated-domains.china.conf 以免路由器速度越来越慢。默认配置不再更新此文件,如果你的路由器性能较好,你可以手动更新
非特殊情况,可以不用 accelerated-domains.china.conf ,有的国内 DNS 可以同时解析国内外网站。路由器里只要保留广告屏蔽就行了
OpenWrt路由器自动屏蔽广告
/etc/dnsmasq.d下有个 ad-cn.conf 文件,内容类似如下:
server=/.mobads.baidu.com/127.0.0.0
server=/.mobads-logs.baidu.com/127.0.0.0
server=/.media.admob.com/127.0.0.0
...
意思是.mobads.baidu.com的域名解析转发到 127.0.0.0,这个地址不具备域名解析的功能,于是就达到了屏蔽广告的功能
运行命令:
root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch blockad-cn
root@OpenWrt:~# chmod +x blockad-cn
root@OpenWrt:~# vi blockad-cn
#!/bin/sh
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# last update: 2018-10
TMP_HOSTS=/tmp/block.hosts.unsorted
HOSTS=/etc/dnsmasq.d/ad-cn.conf
# remove any old TMP_HOSTS that might have stuck around
rm ${TMP_HOSTS} 2> /dev/null
for URL in \
"https://github.com/softwaredownload/cnhosts/raw/data/_build/tmp/full/hosts" \
"https://github.com/e32ubhds/Hosts/raw/master/Hosts"
do
# filter out comment lines, empty lines, localhost...
# remove trailing comments, space( ,tab), empty line
# replace line to dnsmasq format
# remove carriage returns
# append the results to TMP_HOSTS
wget -4 --no-check-certificate -qO- "${URL}" | grep -v -e "^#" -e "^\s*$" -e "localhost" -e "broadcasthost" -e "ip6" -e "^;" -e "^@" -e "^:" -e "^[a-zA-Z]" \
| sed -E -e "s/#.*$//" -e "s/[[:space:]]*//g" -e "/^$/d" \
-e "s/^127.0.0.1/server=\/./" -e "s/0.0.0.0/server=\/./" -e "/^[0-9].*$/d" -e "s/$/\/127.0.0.0/" \
| tr -d "\r" >> ${TMP_HOSTS}
done
# remove duplicate hosts and save the real hosts file
sort ${TMP_HOSTS} | uniq > ${HOSTS}
rm ${TMP_HOSTS} 2> /dev/null
OpenWrt自动生成广告屏蔽列表说明:
-
2018-10起,blockad分成 blockad-cn 和 blockad-en 分别用于是屏蔽国内外广告
-
运行上面命令产生的广告屏蔽列表比较长,如果路由器性能比较低,dnsmasq匹配域名负荷会太大
-
如果dnsmasq超负荷工作,可能会失去响应,导致打不开网页,这时需要登录路由器运行命令: /etc/init.d/dnsmasq restart
-
所以,还是尽量用性能好点的路由器吧
路由器性能比电脑差很多,如果屏蔽列表很长,那么短时间内快速打开数个网页就可能导致dnsmasq失去响应。最好是看完一个网页就关闭一个,再打开新的网页
我认为在多数情况下,屏蔽广告可以在电脑里操作,移动设备可以用专门的广告屏蔽软件。当然,如果路由器性能很是强悍,在路由器里屏蔽广告是最爽的事情
通常的做法,在路由器里屏蔽部分域名,然后在电脑里设置更广泛、精确的屏蔽,主要是设置host文件屏蔽和浏览器插件屏蔽
浏览器插件屏蔽,可以装这些Chrome浏览器插件:uBlock Origin,ADfree.Player.Online。其中uBlock Origin的作用和Adblock Plus类似,但是设置更加丰富
计划任务:定时更新dnsmasq配置文件和自动重启shadowsocks
root@OpenWrt:~# crontab -e
输入以下内容:
*/30 * * * * isfound=$(ps | grep "ss-redir" | grep -v "grep"); if [ -z "$isfound" ]; then echo "$(date): restart ss-redir...">>/tmp/log/ss-monitor.log && /etc/init.d/shadowsocks restart; fi
* 12 * * * /usr/bin/chinalist
* 12 * * * /usr/bin/blockad-cn
OpenWrt计划任务说明:
- 每半小时检查shadowsocks-libev 客户端,如果退出就自动重启
- 每天中午12点运行chinalist
- 每天中午12点运行blockad-cn
2014-09-24版的dir505, wr2543预编译固件是启用了计划任务的,这会有潜在的不确定性,如果更新时下载的文件如accelerated-domains.china.conf存在错误,导致dnsmasq无法启动,科学上网功能自然失效
如果你启用了上面的计划任务,某一天突然不能科学上网了,这时设置客户端的IP地址为和路由器同网段,登录路由器,用ps命令查看dnsmasq进程是否启动了,如果没有启动,就重刷固件或者用 https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/dnsmasq.d 下面的文件代替路由器里/etc/dnsmasq.d/下的文件
一般不建议自动更新 /etc/dnsmasq.d/的文件 , 以免给科学上网失败时排查原因增加难度。可以手动运行命令更新,更新后立即重启 dnsmasq 测试一下上网是否正常
附录:计划任务定时关闭路由器OpenWrt:
人类的本性是目光短浅,玩得一时兴趣就会忘记定时休息的重要性。解决办法是在路由器里设置计划任务,禁止夜里某个时间段里使用路由器。下面的例子中,每20分钟检测一次,如果迟于20点10分或者早于7点就自动关闭OpenWrt路由器。这对小孩子特别有用,现在很多孩子使用电子设备上瘾,一个人睡的话甚至半夜在被窝里偷偷上网,现在好了,除非孩子强大到会登陆路由器修改设置,否则半夜重启路由器都无法通过路由器上网了
不过现在移动流量越来越便宜了,路由器自动关机控制的主要是我们自己使用电脑的时间,而不是控制小孩玩移动设备了
*/20 * * * * TIME=$(date +"%H%M"); if [ $TIME -ge 2010 ] || [ $TIME -le 700 ]; then poweroff; fi
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/usr/bin
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/dnsmasq.d
- https://github.com/felixonmars/dnsmasq-china-list
- https://xwvut.software-download.name/
OpenWrt连接失败,可以上网但无法科学上网,为什么
给路由器刷上OpenWrt,并按照 本教程 设置了服务端和客户端,但还是有问题,怎么办? C
科学上网后国外 AI 如 OpenAI、Claude、Copilot 拒绝提供服务,怎么办
本项目的 OpenWrt 路由器科学上网,即使启用全局科学上网模式,还是有可能泄露部分本机真实信息并且被国外 AI 公司识别,导致被对方拒绝提供服务
解决办法,采用 Overtls + tun2proxy 科学上网,这时 tun2proxy 接管了本机的全部流量并转发到 overtls 监听的端口。除非你的服务端 IP 地址被对方列入黑名单,否则,这种科学上网方法是十分安全、可靠的
有的网站能科学上网,有的网站科学上网失败,google打不开或打开非常慢,这是怎么回事
-
This site can’t be reached
gfw.com unexpectedly closed the connection.
ERR_CONNECTION_CLOSED
-
This site can’t be reached
The connection was reset
ERR_CONNECTION_CLOSED
-
This site can’t be reached
www.tumblr.com took too long to respond
ERR_TIMED_OUT
有不少朋友遇到过上面这些情况,打开 https://google.com 或者 https://youtube.com 没有问题,但是有的网站很难打开,或者干脆打不开
比如 https://tumblr.com 或者 https://flickr.com 有时就很难打开
这是怎么回事,百思不得其解,如果说科学上网配置不对,又怎么解释有的网站科学上网没有问题呢
难道电脑系统设置有问题?查找各种教程,一大通修改后,还是不行
再换用不同的浏览器,Chrome, FireFox, Edge, IE,不行的还是不行
难道 GFW 成精了,不是说好了建国后不能成精的吗
最后的努力,不成功就向 妖精 投降算了:
- 更换成最好的加密方式
- 加上流量混淆插件
- 更换服务端IP地址、端口
- 软件都手动编译到最新版
忙活了几天,终于升级完成,一测试,不行的还是不行,忍不住,胸膛起伏不定,犹如万马奔腾...
且慢向妖精投降!妖精最终总是被收服的,或收到后宫,或收作坐骑
大道至简,不区分国内、国外 IP地址,全局科学上网,所有流量都走 shodowsocks 加密通道往往能解决这个问题
现在的网页往往比较复杂,会引用各种外部组件,这些外部组件可能是属于不同的 IP 地址,还有 CDN 动态加速,有时可能会出现十分复杂的情况
比如你访问一个著名网站,网站必定会判断你的区域,首先根据你的 IP 地址定位你在 New York
网站有许多组件,有的组件可能根据你的计算机特征,比如系统语言判断你的区域,于是可能判断你的区域为中国,于是到中国的CDN取内容给你...数据在全球来回打转,不但把路由器拖累了,也把网站搞糊涂了,导致网站打开的速度非常慢,或者打不开
我们在路由器里区分国内 IP 和 国外 IP 的本意是为了打开网页更快,然而,有时却适得其反,甚至导致网页根本打不开
为了方便在需要时切换不同的科学上网方式,2018年9月起,/usr/bin/ss-firewall-asia
分成三个文件:
- /usr/bin/ss-firewall-global
- /usr/bin/ss-firewall-china
- /usr/bin/ss-firewall-asia
分别是:默认,全局科学上网,忽略中国IP,忽略亚洲IP
极少数网站比如 www.dropbox.com 打不开, 怎么办
www.dropbox.com 服务器默认使用IPv6地址,DropboBox Windows 电脑客户端也默认连接到服务端IPv6地址,科学上网固件不支持 IPv6 科学上网,此种情况可能科学上网失败
解决方法是网络连接的属性里不要勾选 Internet Protocol Version 6 (TCP/IPv6)
以 Windows 系统为例:
- 按
Windows
键,中文系统输入控制面板
,英文系统输入control panel
,然后打开旧版的控制面板 - 点击
Network and internet
- 点击
Network and Sharing Center
- 点击在用的网络连接,如
Wi-Fi fanqiang
- 点击 “属性”
Properties
- 不勾选
Internet Protocol Version 6(TCP/IPv6)
- 点击
OK
保存设置
全局不能科学上网,首先ping 服务器的 ip 看看速度怎么样
ping 1.0.9.8
如果 ping 不通,考虑换服务器IP地址
不能科学上网,国内网能上,服务器IP能 ping 通
可能是服务器端口被 GFW 屏蔽了。可以这样测试服务器端口是否被屏蔽
在本地 Linux 下, 或者在 Windows 里安装 MSYS2, 执行如下命令:
$ telnet 109.8.7.6 1098
Trying 109.8.7.6...
Connected to 109.8.7.6.
Escape character is '^]'
telnet> q
Connection closed
109.8.7.6 是服务器 IP 地址, 1098 是端口,如果结果显示 Connected to,说明端口是可以连接的,否则是端口可能被 GFW 屏蔽了,换一下 SS 的服务器端口可能就可以了。这种例子我碰到过
附带说明,ping 通端口后,按 Ctrl + ] 退出连接,再按 q 退出 telnet
如果 ping 不通或连接时间过长,按 Ctrl + c 中断
ping IP能通,telnet IP port 能连上,科学上网时好时坏,怎么办
这是科学上网被干扰了,默认科学上网流量走服务端不常用端口,网管会怀疑你在做什么,从而干扰你,这个干扰力度各地不一,有的地区不怎么干扰,有的地区你没连几分钟就干扰你。解决办法是给 Shadowsocks 加上插件。推荐使用 Simple Obfs 插件,并使用 http 模式,这种模式你需要有自己的服务器和域名
检查shadowsocks服务端启动时有没有带上 -u参数
-u enable udprelay mode TPROXY is required in redir mode
本教程使用的,也就是官方的shadowsocs-libev服务端是默认启动带上 -u 参数的。但有的朋友可能使用其他版本的服务端,如Python版,就不能保证服务端启动时默认就带 -u 参数
可以这样查询服务端是否启动,及启动参数:
$ ps -aux | grep ss-server
#.../usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -a root -u -f /var/run/shadowsocks-libev/shadowsocks-libev.pid
可见上面启动时已经带了 -u 参数
登录OpenWrt路由器查询科学上网相关进程有没有启动
root@eastking:~# ps | grep ss-
#.../usr/bin/ss-redir -b 0.0.0.0 -c /etc/shadowsocks-libev/config.json -f /var/run/shadowsocks.pid
#.../usr/bin/ss-tunnel -b 0.0.0.0 -c /etc/shadowsocks-libev/config.json -l 3210 -L 8.8.4.4:53 -u
root@eastking:~# ps | grep dnsmasq
#.../usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -k -x /var/run/dnsmasq/dnsmasq.pid
上面的查询显示,ss-redir ss-tunnel dnsmasq都已经正常启动
有时虽然ss-redir ss-tunnel dnsmasq等进程都在,但已经失去响应了,这就需要:
重启 shadowsocks,登录路由器,运行命令:
/etc/init.d/shadowsocks restart
restart
内部分 stop
和 start
两步执行,实际测试发现,少数时候 stop
并不能关闭 shadowsocks相关进程,那么只能:
按路由器背后的电源重启OpenWrt路由器
科学上网不稳定,有时能连上被墙网站,有时连不上
shadowsocks-libev 加密科学上网的方式加大了墙的辨识难度,但不是不可能被辨识。因此,还是有可能受到干扰的。解决方法:更换加密方式,服务端 IP 地址或者服务端的端口
如果是轻度使用科学上网,一般情况即使暂时科学上网不稳定,问题也不大。如果重度使用科学上网,可能被特别注意,被干扰的机率会更大
登录路由器用dig查询被墙域名
本教程预编译的科学上网固件都安装了 bind-dig,方便调试
注:本教程默认的 tunnel 转发端口都是 3210
正常的结果类似如下:
root@eastking:~# dig @localhost -p 3210 google.com
; <<>> DiG 9.9.7-P3 <<>> @localhost -p 3210 google.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38460
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 299 IN A 74.125.226.33
google.com. 299 IN A 74.125.226.36
google.com. 299 IN A 74.125.226.32
google.com. 299 IN A 74.125.226.38
google.com. 299 IN A 74.125.226.41
google.com. 299 IN A 74.125.226.39
google.com. 299 IN A 74.125.226.35
google.com. 299 IN A 74.125.226.46
google.com. 299 IN A 74.125.226.37
google.com. 299 IN A 74.125.226.40
google.com. 299 IN A 74.125.226.34
;; Query time: 290 msec
;; SERVER: 127.0.0.1#3210(127.0.0.1)
;; WHEN: Mon Dec 28 11:55:30 CST 2015
;; MSG SIZE rcvd: 215
仔细检查每一项科学上网配置
还是不能科学上网?也有可能是某项配置有误,仔细检查教程中讲到的每一项科学上网设置,确保没有错误
有一次我给路由器新刷科学上网固件后,总是不能科学上网。于是逐项检查,发现了某项配置有误,修正后就可用了
有几次,我发现 /etc/dnsmasq.d/gfwlist.conf 文件成了空文件,恢复后就正常了
相关资源:
Shodowsocks科学上网不同加密算法的区别
Shodowsocks科学上网不同加密方法,哪一种速度最快最好:
- 科学上网不稳定,有的能上,有的不能上,有时能上,有时不能上,可能是加密方式的特征被识别,从而被干扰,方法是更换加密方式
- rc4-md5加解密速度虽然快,但是加密强度不够大,容易被干扰
- 无论哪一种加密方式,只要使用的人多了,就可能被重点研究,从而受到干扰
- 目前推荐使用 AEAD 加密方式
- xchacha20-ietf-poly1305
- chacha20-ietf-poly1305
- aes-256-gcm
- aes-192-gcm
- aes-128-gcm
bf-cfb
chacha20
salsa20
rc4-md5
下列加密方法已经不推荐了,可能会被探测到:
aes-128-ctr
aes-192-ctr
aes-256-ctr
aes-128-cfb
aes-192-cfb
aes-256-cfb
camellia-128-cfb
camellia-192-cfb
camellia-256-cfb
chacha20-ietf
什么是 AEAD 加密方法
缩写易忘是因为不知道原形,复杂之所以复杂是因为缺少细节的了解。世事莫不如此
AEAD 就是 Authenticated Encryption with Associated Data,使用关联数据进行身份验证加密,是一种同时具备保密性、完整性和可认证性的加密方法
201809 预编译 WNDR4300 科学上网固件已经 支持目前最受推荐的 AEAD 加密实现之一: xchacha20-ietf-poly1305
那么什么是 xchacha20-ietf-poly1305 加密
推荐使用 xchacha20-ietf-poly1305 加密
xchacha20-ietf-poly1305 加密算法被 libsodium 官方推荐
which one should I use? XChaCha20-Poly1305-IETF is the safest choice.
我应该选择哪种加密算法?
XChaCha20-Poly1305-IETF是最安全的选择
怎样开启XChaCha20-Poly1305-IETF 加密算法
-
服务端,Ubuntu 17.10 或更新版本安装 shadowsocks-libev后,自动支持
我通常习惯把服Ubuntu更新到最新版,登录的欢迎页面显示是 18.04.1
再看下 shadowsocks-libev 的版本:
ss-server --help shadowsocks-libev 3.1.3 -m <encrypt_method> Encrypt method: rc4-md5, aes-128-gcm, aes-192-gcm, aes-256-gcm, aes-128-cfb, aes-192-cfb, aes-256-cfb, aes-128-ctr, aes-192-ctr, aes-256-ctr, camellia-128-cfb, camellia-192-cfb, camellia-256-cfb, bf-cfb, chacha20-ietf-poly1305, xchacha20-ietf-poly1305, salsa20, chacha20 and chacha20-ietf. The default cipher is rc4-md5.
-
路由器是否支持 xchacha20-ietf-poly1305
路由器要支持xchacha20-ietf-poly1305加密,需要满足二个条件:
- shadowsocks-libev 3.0+ (2017 年 2 月 1 日) - libsodium 1.0.12+
实际上,编译shadowsocks-libev for OpenWrt时会同时编译依赖库,只要shadowsocks-libev 的版本满足条件就可以了
登录201809编译固件的 wndr4300 路由器查看
root@eastking:/etc# ss-redir -h shadowsocks-libev 3.2.0 -m <encrypt_method> Encrypt method: rc4-md5, aes-128-gcm, aes-192-gcm, aes-256-gcm, aes-128-cfb, aes-192-cfb, aes-256-cfb, aes-128-ctr, aes-192-ctr, aes-256-ctr, camellia-128-cfb, camellia-192-cfb, camellia-256-cfb, bf-cfb, chacha20-ietf-poly1305, xchacha20-ietf-poly1305, salsa20, chacha20 and chacha20-ietf. The default cipher is rc4-md5.
考虑到 wndr4300 性能并不强悍,可以使用chacha20-ietf-poly1305,应该比 xchacha20-ietf-poly1305 节省一些资源
-
Windows PC 客户端
shadowsocks-windows 自 4.0.9 版本(2018 年 3 月 14 日)起支持 xchacha20-ietf-poly1305 加密算法
-
Android 客户端
shadowsocks-android 自 4.1.4 版本(2017 年 4 月 12 日)起支持 xchacha20-ietf-poly1305 加密算法
相关资源:
- https://shadowsocks.org/en/spec/AEAD-Ciphers.html
- https://shadowsocks.org/en/spec/Stream-Ciphers.html
- https://github.com/shadowsocks/shadowsocks-org/issues/3
- https://download.libsodium.org/doc/secret-key_cryptography/aead#tldr-which-one-should-i-use
- https://zzz.buzz/zh/gfw/2018/03/18/shadowsocks-xchacha20-ietf-poly1305-compatibility-notes/
- https://zhuanlan.zhihu.com/p/28566058
零起点DO VPS shadowsocks-libev 科学上网设置教程
Digital Ocean (DO) 的优点:
-
业界最有名的VPS服务商,服务有保障
-
全SSD硬盘,速度极快,重启在10秒内
-
所有 VPS 具有独立 IP 地址
-
费用极低,$4/月起,作为 shadowsocks 足够了
-
DO 网站的管理面板 Console 可以直接运行所有 Linux 命令,可以不在本机设置 SSH
-
收费以小时计算,不用了可以删除,不会多收一分钱
-
官方专业人员发布大量零起点教程,服务器管理菜鸟的福音
-
更换 IP 十分方便,创建 snapshot,再从 snapshot 新建 Droplet, 就能得到新的 IP了
Digital Ocean 更换 IP 就是几分钟的事情,然后科学上网客户端更新一下 Server IP 就可以了
创建科学上网用的虚拟服务器 Droplet
为什么 Digital Ocean 把 VPS 叫作 Droplet (水滴) 呢? 这是因为公司名字是 Digital Ocean(数字海洋),正是海量的水滴组成了 VPS 的海洋
现在我们知道了 VPS 在 DO 叫作 Droplet
注册DO并绑定支付方式后,登录 Digital Ocean 管理后台,点击右上角的 Create
从下拉菜单中选择 Droplets
:
-
Choose region 选择地区
多个城市可选,一般选择 San Francisco 或 New York。据从国内有限 ping ip 测试,San Francisco 比 New York 快约 60ms
-
Datacenter 选择数据中心
同一个地区可能有多个数据中心,选择旧 VPS 相同的数据中心
-
Choose an image 选择操作系统镜像
默认就是最新版的 Ubuntu x64,挺好!
-
Choose Size 选择大小
-
Droplet type 选择类型
如上图,选择
Basic
基础款 VPS -
CPU options 配置选项
如上图,点击左侧的箭头后,会显示出我们需要的最便宜的方案
如上图,再点击选择最便宜的VPS方案,4 美元每月,0.006美元每小时,相当于人民币几分钱每小时
-
-
Advanced options 高级选项
Advanced Options
(高级选项)可能默认没有展开,点击展开它勾选
Enable Ipv6(free)
(启用 IPv6) -
Finalize Details 最终细节设置
- Quantity(数量)。默认创建 1 个 Droplet
- Hostname(主机名)。你自己用来分辨主机的特点、用途等
- Tags(标签)。如果你的VPS很多,标签可以用来分类。此处可以不填
-
Create Droplet 创建虚拟服务器 VPS
点击 Create Droplet 创建虚拟服务器VPS
进入 Digital Ocean VPS管理界面
在20秒内,VPS创建完毕后自动进入了
Droplets
(VPS)列表页面
如上图,以后每次登录 Digital Ocean 网站后,先展开左侧导航栏的 MANAGE
(管理),点击 Droplets 进入所有 VPS 的管理页面,再点击某个 Droplet 名字进入某个VPS的管理页面
如何重置DO VPS Root密码
注:如果已经通过邮件收到root密码,请跳到一下步
在进入你的某个 VPS 管理页面后,
点击左边的 Access
再点击右边的 Reset Root Password
重置密码:
重置密码完成后,新的密码会发送到你的邮箱,下面我们就用这个密码登录并直接通过网页 Console 控制台管理 VPS
进入DO VPS命令行控制界面 Console Access
DO有个极为强大的功能,可以可以直接在管理后台 Access Console 运行 Linux 命令管理 VPS,相当于一个在线版的ssh
如上图,在进入你的 Droplets 列表页面后,点击某个Droplet最右边的 More, 在弹菜单中选择 Access Console 进入命令行管理VPS
打开 Console 的另一方法是,进入某个VPS的管理页面后,点击页面右上角的 Console
或者先点击左边的 Access
然后点击 Launch Droplet Console
如下图:
如果你等了一会儿命令行界面还没有出来,就按F5刷新页面直到打开
点击打开的命令行窗口以获得输入焦点
命令行设置新的Root密码
开启 Digital Ocean Console Access后,输入root并回车,然后重新设置密码
Ubuntu 18.04 ubuntu-shadowsocks tty1
ubuntu-shadowsocks login: root
Passwd: 输入root密码
You are required to change your password immediately (root enforced)
Changing password for root.
(Current) UNIX password: 输入root密码
Enter new UNIX password: 输入新的root密码
Retype UNIX password: 再次输入新的root密码
密码更新完成后更新一下系统:
root@ubuntu-shadowsocks:~# apt-get update
root@ubuntu-shadowsocks:~# apt-get dist-upgrade
可能会问你要不要更新一下grub,直接回车就行了。(我选择的是升级到 install the package maintainer's version
)
附录一:快速、极省钱更换 DO VPS IP 地址
附录二:江湖求急,用DO Console 控制台从源码编译 shadowsocks-libev server
2016-01-19发现,shadowsocks.org 网页无法打开,这给 apt-get install
方式安装shadowsocks-libev带来不便,不过我们可以自己从源码编译,很简单,而且随时可以编译到最新的版本
Console Access 界面是无法粘贴命令的,把下面命令逐行粘贴到浏览器地址栏,抄着输入也是很快的,输入第一行命令并回车后输入 y 安装所有相关包
root@ubuntu-shadowsocks:~# apt-get install build-essential autoconf libtool libssl-dev gawk debhelper dh-systemd init-system-helpers pkg-config git
root@ubuntu-shadowsocks:~# git clone https://github.com/shadowsocks/shadowsocks-libev.git
root@ubuntu-shadowsocks:~# cd shadowsocks-libev
root@ubuntu-shadowsocks:~# dpkg-buildpackage -us -uc -i
root@ubuntu-shadowsocks:~# cd ..
root@ubuntu-shadowsocks:~# sudo dpkg -i shadowsocks-libev*.deb
root@ubuntu-shadowsocks:~# ls /usr/bin/ss-*
root@ubuntu-shadowsocks:~# ss-local ss-manager ss-redir ss-server ss-tunnel
设置 shadowsocks-libev server,见 科学上网软件Shadowsocks-libev服务端设置
至此,我们已经开通了DO VPS,并且在网页界面就安装完成了 shadowsocks-libev,下面是修改设置并重启shadowsocks-libev
root@ubuntu-shadowsocks:~# vi /etc/shadowsocks-libev/config.json
root@ubuntu-shadowsocks:~# service shadowsocks-libev restart
详细的设置教程在 科学上网软件Shadowsocks-libev服务端设置
再配置好客户端,如果没有错误,就可以成功科学上网了。所有以上过程2016-01-19亲测通过
一般情况下我们应该从仓库安装预编译shadowsocks-libev包:
sudo apt update
sudo apt install shadowsocks-libev
从仓库安装以后,以后你 更新 Ubuntu 时,shadowsocks 也会得到更新(如果有新版)。如果你是从源码编译安装的 shadowsocks,难道弄个定时器提醒自己十天半月从源码编译更新一次?岂不烦人
这里从源码编译 shadowsocks-libev 只是演示 DO Console 控制台的强大之处。万一服务器 IP 被封,或者其他原因登录不上 SSH,我们可以用 DO Console 管理 VPS,Console 就是在线版的 SSH
VPS价格更便宜的也许会有,但是服务稳定性,技术积累,各种资源,小型 VPS 提供商是不能和 DO 这样业界领先的 VPS 提供商相比的
相关资源:
- 快速、极省钱更换 DO VPS IP 地址
- Ubuntu OpenWrt 开启 TCP Fast Open
- Shadowsocks 服务端 Ubuntu 开启BBR加速
- Ubuntu server 最大打开文件数目优化
- Linux TCP UDP 网络性能优化
- Linux Ubuntu swap 交换文件优化
- https://github.com/shadowsocks/shadowsocks-libev
- https://xwvut.software-download.name/
快速、极省钱更换 DO VPS IP 地址
DO 是 Digital Ocean 的缩写
DO 是业界最著名、技术最成熟、价格也很香的 VPS 服务商,详细介绍见前文 零起点DO VPS shadowsocks-libev 科学上网设置教程
你按照上述教程设置好 VPS 以后,有时你可能想要更换一下 VPS 的 IP 地址,原因可能是你要注册某个服务的多个账号,或者原来的 IP 地址被屏蔽了,这时你选用 DO 的优势就体现出来了,更换一个 IP 地址仅需几分钟时间,而所需的费用可以忽略不计(可能几分钱吧),这么省钱的原因是因为 DO 是按照精确使用时间来计费的
准备工作
如果你还没有 DO 的VPS,可以按照 零起点DO VPS shadowsocks-libev 科学上网设置教程 创建 VPS(在 DO 叫作 Droplet)
Droplet 的名字可以自己起,如 ubuntu-shadowsocks,设置好 shadowsocks-libev 服务端,其中server写 ["[::0]","0.0.0.0"]
并测试通过。我们用这种格式指定 IP 地址,更换 IP 后就不用修改 shadowsocks-libev 服务端的配置文件了
VPS 关机
DO VPS 关机有二种方式
- 在本机用 ssh 登录 VPS 执行关机
- 登录 Digital Ocean 网站执行关机
如果你的VPS有重要的用途,比如你有个论坛,随时可能有新的帖子需要写入数据库,这时你可以用第一种方式,即在本机用 ssh 登录 VPS 执行关机
如果你的 VPS 没有复杂的用途,可以用第二种方式,即在 Digital Ocean 网站执行关机
-
在本机用 ssh 登录 VPS 执行关机的方法
ssh 登录 VPS 后 执行命令:
sudo poweroff
-
登录 Digital Ocean 网站执行关机的方法
登录后,管理页面的左边是侧边栏,点击
MANAGE
(管理) 打开子菜单,点击子菜单里的Droplets
,在右侧会显示出所有的 VPS,点击相应的 VPS 的名字进入该 VPS 的管理页面,页面的右上侧有个写着ON
(目前状态是开机)的绿色滑动按钮,如下图:点击这个
ON
按钮,会弹出一个提示页面,如下图:这个页面上的文字提示你关机以后,你的VPS还占用IP和空间等资源,因此关机期间仍旧在计费,如果你想要停止计费,就要 destroy the Droplet(销毁这个VPS)
目前我们还不能销毁这个 VPS,因为我们还没有制作 Snapshot(快照备份)
果断点击右下角的
Turn off
(关机)按钮过了几秒,如果你注意观察的话就会发现,关机完成后,页面左侧的水滴图标会变灰,页面右上侧的
ON
按钮会变成灰色的OFF
按钮,这表示我们可以进入下一步操作了。OFF 按钮如下图
创建 VPS Snapshot(快照)
每个 VPS 的管理页面有自己的左侧边栏,找到并点击 Snapshots
(快照)
打开的页面中间,Enter snapshot name
(输入快照名字),它有个默认名字,你嫌太长的可以自己输入一个名字如 shadowsocks
页面中的文字提示你,DO 替你保存快照是要收费的,目前 2023-02-05 的费用是 $0.06/GiB/mo(1 GiB 保存一个月收费 0.06 美元)
我们并不关心这个价格贵不贵,在本教程中,它的存在就几分钟的时间,所产生的费用极少,我们得到新 IP 后就会把这个 Snapshot 快照销毁
点击 Take Snapshot 按钮
,如下图:
从 Snapshot(快照)创建 VPS以得到新 IP
点击页面右上角的 Create
按钮,在弹出菜单选择 Droplets
(VPS)
在 Choose an image
, 点击 Snapshots
,这里会列出你刚才命名的 snapshot (快照),如 shadowsocks
,选择它。见下图:
创建 Droplet 完成后,页面会显示 新的 VPS 的 IP 地址,先在本机 ping 一下这个IP地址能否连上,以我的经验,还没有遇到过 ping 不通的 IP 地址
万一这个新的IP地址 Ping 不通,那么就要销毁这个新创建的 VPS,再重新创建 VPS,系统会再分配一个新的IP地址给你
现在你可以用 shadowsocks 客户端连接到新的 IP 地址,VPS 服务端不用更改任何设置
销毁旧 Droplet (VPS)和 Snapshot(快照)
现在你已经得到了新的可用的 IP 地址,如果你只想要一个 VPS 的话,就可以把旧的 VPS 销毁
如上图,首先要从 Droplets
(所有VPS的管理界面)点击你要销毁的 VPS 的名字进入其管理界面
如上图点击想要销毁的 VPS 的左侧导航栏的 Destroy
(销毁)
下面列出的你不需要的 Snapshot 快照也一并勾选销毁,销毁以后自然不再计费了
如上图,再点击页面中间红色的 Destroy this Droplet
(销毁这个 VPS)按钮
这时会弹出一个页面提示你要慎重操作,要求你手动 输入 你要销毁的 Droplet 的名字以确保你不是手一滑的失误操作
输入框的上方显示了你要销毁的 Droplet 的名字,这时你要再次确认你的选择是正确的,然后就在输入框里输入 Droplet 的名字,输入完成后,弹出框右下角的 Destroy
(销毁)按钮这时会由灰色变成可用,点击它即可。如下图:
总结
你有一个 Digital Ocean VPS,你要给它换个 IP地址,操作步骤是先把 VPS 关机,然后从这个 VPS 创建 Snapshot 快照,再从这个 Snapshot 快照新建一个 VPS,新 VPS 的 IP 地址可用的话,就可以把旧 VPS 及 snapshot 销毁,因为我们操作所用时间很短,所以更换 IP 地址所产生的费用几乎可以忽略不计
跳过关机步骤,更快得到 VPS 新 IP
如果你的 VPS 并没有持续写入的重要数据,那么你可以跳过 VPS 关机的步骤,直接创建 Snapshot 快照,这时 Take snapshot
(制作快照)按钮会变成 Take live snapshot
(制作实时快照),其他步骤和上面的教程相同
更改科学上网路由器中的 ip_server.txt
如果你按照本 OpenWrt 路由器 shadowsocks 自动科学上网、科学上网教程 设置了科学上网路由器,VPS 换成新 IP 后,需要同步更改路由器里的 server IP
-
命令行 ssh 登录路由器
-
命运令更改
ip_server.txt
cd /etc/shadowsocks-libev
vi ip_server.txt
把
ip_server.txt
中不用的 IP 删掉,增加新的 IP,每个 IP 一行,注意不要插入不必要的空格 -
启用新 IP
最简单的方法是把路由器关机再开机
也可以在 ssh 登录路由器后重启 shadowscks 服务:
/etc/init.d/shadowsocks stop
/etc/init.d/shadowsocks start
或者用命令行直接重启路由器:
reboot
2023-02-05
Android 安卓手机安装 shadowsocks 影梭科学上网、科学上网教程
本教程可以用于小米、华为、三星、VIVO、OPPO等安卓手机安装 shadowsocks 科学上网
下载 shadowsocks-Android 安卓版科学上网软件
如果手机已经连上了已经科学上网的路由器,那么可以这样操作:
-
打开浏览器,地址栏输入 https://www.google.com
-
搜索
android shadowsocks
-
如上图,第一个搜索结果点击进去就是了
如果手机没有连上科学上网网络,那么可以直接从开源项目地址 github 下载。点击下面链接:
https://github.com/shadowsocks/shadowsocks-android/releases
-
进入了Android shadowsocks 下载页面,如下图这样:
-
点击 Assets 展开下载文件列表,如下图:
点击
shadowsocks-arm64...
或者shadowsocks--universal...
开始下载。手机安装第三方软件的方法可以搜索手机品牌的软件安装教程
Android 安卓手机设置 shadowsocks 科学上网配置文件
-
启动 shadowsocks后,点击右上角的加号创建新的科学上网配置文件,如下图
-
Android shadowsocks 科学上网参数设置
-
Profile Name 配置名称,只是助记。这里写了 fanqiang.sofware-download.name
-
Server 服务器IP地址,
1.0.9.8
改成你自己的 -
Remote Port 远程端口,
1098
改成实际端口 -
Password 密码
-
Encrypt Method 加密方法,推荐
CHACHA20-IETF-POLY1305
-
Route 路由,一般选 Bypass LAN and mainland China 绕过局域网及中国大陆地址
-
点右上角的对号保存科学上网设置,如果以后再次编辑也是点击这里。如下图
-
Android 安卓手机 shadowsocks 设置选项
-
点击左上角的三个横杠,进入高级设置界面,如下图:
-
选择 Settings 设置选项,如下图:
-
Service mode 服务模式,选 VPN,如下图:
-
如果 shadowsocks 服务端开启了 TCP fast open,则可以滑动开启 TCP Fast Open。图中已经开启了,科学上网速度会有提升
-
再次点击左上角三横杠,然后点击 Profiles 配置文件 回到配置文件界面,如下图:
Shadowsocks Android 安装 Simple Obfs 插件
经测试,如果没有安装插件,则科学上网流量可能被干扰。下面我们来安装一下 Simple Obfs 混淆插件
Shadowsocks Android 界面里并没有安装插件的功能,我们单独下载安装插件 .apk 后,插件选项才变成可选
-
下载 Simple obfs Android 插件
注意,simple-obfs-android 官方插件 release v0.0.5 并不支持 WebSockets,因此不支持 http 模式,我们需要下载网友新编译的版本
从下面地址下载 Simple obfs 插件:
https://github.com/xianren78/simple-obfs-android/releases
从手机下载 obfs-local-debug.apk 并安装
-
Shadowsocks Android 设置 simple obfs 插件
-
打开 Profile Config
-
Plugin 选择 Simple Obfuscation
-
Configure...
- Server Settings(服务器设置), Obfuscation wrapper:http
- Feature Settings(功能设置), Obfuscation hostname: 32.kige.com
- 点击右上角 对号 保存设置
注意,32.kige.com 改成你实际使用的子域名
服务器上如何设置一个子域名,请参考本文附录
-
Android shadowsocks 安卓手机影梭科学上网测试
-
点击配置文件名称
xwvut.software-download.name
以选中配置文件,选中后左边有绿色的竖条你可能会问,我就一个配置文件,为什么还要选中配置文件才能使用?这是考虑到有的人可能拥有多个服务端,或者测试多个配置文件,于是左边有绿色的竖条表示选中的配置,如果是灰色竖条就表示没有选中,很直观
如果要删除一个不需要的配置文件,向左滑动就可以了
-
右下角有个圆形图标,中间有个梭子,灰色表示没有开启科学上网,点击它,图标会变成绿色,表示 shadowsocks 已经在连接服务端
如下图,绿色图标表示 shadowsocks 已经在工作了
-
测试安卓手机科学上网有没有成功
如果手机已经连接了科学上网路由器,先关闭WIFI 连接,改用流量上网
打开浏览器,导航到:
如下图,用手机流量科学上网看 youtube,速度挺不错
如果打不开 youtube,就要仔细检查 各项设置是否正确
最后提醒一下,科学上网结束时,要点击 shadowsocks-Android 右下角圆形图标停止科学上网,否则手机电量会哗哗往下掉
相关资源:
- Linux 服务器安装 Simple-obfs 混淆插件
- Simple Obfs 混淆插件的工作原理
- OpenWrt 路由器使用 Simple Obfs混淆插件
- Windows科学上网最好方法:shadowsocks-libev + simple-obfs + TFO教程
- Windows上使用配置 Simple Obfs 混淆插件
- https://github.com/shadowsocks/simple-obfs
- https://github.com/shadowsocks/shadowsocks-android/releases
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/ebook/06.01.md
- https://xwvut.software-download.name/
OpenWrt + Git Bash for Windows 快速切换科学上网模式:全局科学上网或局部科学上网
本项目 /openwrt-fanqiang/bin 下有三个文件,用来切换不同的科学上网模式,分别是:
-
科学上网时忽略亚洲IP: ss-firewall-asia
-
全局科学上网模式,所有流量加密:ss-firewall-global
-
科学上网时忽略中国IP: ss-firewall-china
为什么要作这样的细分?
- 有些外网,如果不是全局科学上网,可能打不开
- 如果科学上网时忽略中国IP,因中国区IP列表较长,对有些路由器压力较大,因此默认科学上网时忽略亚洲IP
如果你的路由器里面没有这几个文件,请先把它们复制到路由器里
怎样手动切换科学上网模式
本项目 /openwrt/default/etc/init.d/shadowsocks
文件里有如下代码:
/usr/bin/ss-firewall-asia
#/usr/bin/ss-firewall-global
#/usr/bin/ss-firewall-china
切换方法是命令行登录路由器,修改这四行代码,把不需要行的注释掉(以#开始),把需要的行启用(去掉开始处#)
如果是一次性修改,命令行切换科学上网模式也不麻烦
更常用的场景是,平时设置科学上网时忽略中国或亚洲IP,浏览外网时,某些外网可能打不开,这时需要切换到全局科学上网模式,如果每次都命令行登录路由器手动切换,就有点费时了
有没有更加简单的方便,特别是在 Windows 下?
OpenWrt 路由器设置 ssh 免密码登录原理
网上教程很多,可以用 openwrt 免密码
搜索教程了解详细原理,这里略过
安装 Git for Windows
安装并设置 Git for Windows后,我们就有了一个类似 Linux 下的 bash 环境,做到不同系统操作习惯类似,带来了很大的便利
-
下载地址: https://git-scm.com/download/win
-
Select Components
选择组件 步骤时,确认选中以几项(默认已经选中)
-
Windows Explorer integration
和 Windows 资源管理器整合,安装完成后,在文件夹右击,就可以
Git Bash here
打开当前目录下的 bash,十分方便 -
Associate .sh files to be run with Bash
.sh 文件由 Bash 执行,和Linux 下一样,双击 .sh 文件可以运行了
-
-
Choosing the default editor used by Git
选择默认编辑器,默认是Vim,联准了:)
-
Adjusting your PATH environment
调整 PATH 环境变量,默认是选中第一项
Use Git from Git Bash onley
,如果只是从 Git Bash使用Git,那么选中这项就可以了选中
Use Git from the Windows Command Prompt
好处是可以让安装程序把 git.exe 的目录加入系统 Path 环境变量,于是其他软件也可以从命令行调用 git 了 -
Choosing the SSH executable
默认是
Use OPenSSH
,很好,我们正需要和 Linux 下 ssh 操作习惯一致
最简单安装方法,全部安装默认。如果有需要修改的地方,可以重新再安装一次
配置 ssh config,实现自动登录路由器
64位系统,安装64位git,默认安装目录是:
C:\Program Files\Git
ssh 系统config文件是:
C:\Program Files\Git\etc\ssh\ssh_config
不建议把自定义设置写在这个文件里,以免重装Git后被覆盖。下面把自定义设置放在用户设置里
按 Windows 键,输入 git bash 回车,默认进入的是 $HOME 目录
以下操作是 Linux 下一样的
# 列出当前目录,也就是 C:\Users\your_name 下的内容
$ ls
$ mkdir .ssh
$ cd .ssh
$ ls
$ touch config
$ vi config
输入下面内容:
Host router
HostName 192.168.1.1
User root
Port 22
IdentityFile /path/to/rsa
如果配置正确,运行下面命令就可以自动登录路由器(router)了
# 自动登录路由器
$ ssh router
如果你电脑里的所有重要文件都保存在云盘,那么可以创建链接文件,这时 $HOME/.ssh/config 只是个链接,实际文件在云盘里,删除链接文件并不会删除实际文件
-
按 Windws + X
-
Command Prompt(Admin) 控制台(管理员)
执行如下命令:
C:\WINDOWS\system32> cd %homepath% C:\Users\name> cd .ssh C:\Users\name\.ssh> del config C:\Users\name\.ssh> mklink config C:\cloud_app\ssh\config
路由器一键切换四种科学上网模式
配置好免密码登录路由器后,大功已经成就了一半
创建一个 test.sh,内容如下:
#!/bin/sh
ssh router <<'ENDSSH'
# Arbitrary commands here execute on router
ENDSSH
前面我们在安装 Git for Windows 的时候,已经选中 .sh 文件由 Bash 执行,这时双击 test.sh,就会自动登录路由器并执行中间的命令
比如,我们创建 ss-global.sh,双击,就能自动切换到路由器全局科学上网模式:
ss-global.sh:
#!/bin/sh
ssh router <<'ENDSSH'
sed -i -e 's@^\(\s*\)\(/.\+ss-firewall\)@\1#\2@g' -e 's@^\(\s*\)#\(/.\+ss-firewall-global$\)@\1\2@' /etc/init.d/shadowsocks
/etc/init.d/shadowsocks restart
ENDSSH
2018-10 起,本项目 openwrt-fanqiang/bin 下新增几个文件用来切换路由器的科学上网模式:
- ss-asia 科学上网时忽略亚洲IP
- ss-global 切换到全局科学上网模式
- ss-china 科学上网时忽略中国IP
给它们加上 .sh 后缀并放在桌面,就可以一键切换科学上网模式了
git bash 快速切换四种科学上网模式
如果上面几个文件不是放在桌面,就要先进入特定目录才能执行命令,这种情况下有没有更加简便的办法呢
办法有很多,我们可以把这四个文件的目录加入到 git bash 的 $PATH 环境变量中,然后在 bash 中输入文件名就可以自动执行命令了
按 Windos 键,输入 git bash
回车 调出 bash
假设你把本项目 https://github.com/softwaredownload/openwrt-fanqiang clone 到了 C 盘根目录,在 Git Bash 里执行如下命令:
$ vi ~/.bashrc
# add line to it
PATH="$PATH:/c/openwrt-fanqiang/bin"
也就是在 bash 环境变量 PATH 后面加上特定目录,设置好后关闭 Git Bash 再调出以使修改生效
上图,Windows 10 下快速调出 Git Bash for Windows
上图,在 Git Bash 命令提示符里输入命令,回车执行。一般的 Linux 脚本,都可以这样在Windows下执行
切换科学上网模式应用场景:
-
浏览外网,某网打不开或打开很慢
- 按Windows键,输入关键词,回车,调出 Git Bash
- 输入
ss-global
回车开始全局科学上网 - 浏览外网结束,调出 Git Bash
- 输入
ss-asia
回车,科学上网忽略亚洲IP
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/bin
- https://git-scm.com/download/win
- https://stackoverflow.com/questions/10681101/git-bash-doesnt-see-my-path
- https://xwvut.software-download.name/
OpenWrt路由器编译科学上网固件教程
实践前面的教程,科学上网已经不是问题,白脸也很happy。在这一章中,我们要定制自己OpenWrt固件,刷上定制的固件,不用任何设置就自动科学上网并自动更新规则
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
编译shadowsocks-libev for OpenWrt ipk安装包
不同OpenWrt版本下编译的shadowsocks-libev ipk一般是不能通用的。比如现在路由器用的是18.06.1版的OpenWrt,如果使用OpenWrt Chaos Calmer 15.05 下编译的shadowsocks-libev,可能安装后根本不能启动
如果你懒得自己编译,可以到下面地址下载:
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
以下 不要使用root用户来操作
用OpenWrt SDK 编译 ipk(2018-09-22更新)
SDK是一个可重定位,预编译的OpenWrt toolchain(工具链),适用于为特定目标交叉编译单个用户空间包,无需从头开始编译整个系统
使用SDK的原因是:
- 为特定版本编译自定义软件,同时确保二进制和功能兼容性
- 编译某些软件包的较新版本
- 使用自定义修补程序或不同功能重新编译现有包
在2016年及以前的文章中,我们没有使用 SDK , 自己重新编译一遍 toolchain 要花费较长时间,现在用预编译的 SDK 可以大大节省编译 ipk 的时间
获取SDK:
您可以下载已编译的SDK,也可以使用“make menuconfig”命令自行编译
如果编译 ipk 所使用的 OpenWrt 版本和 固件的 OpenWrt 版本不同,那么可能会有兼容性问题。为了确保兼容, 我们在同一个页面下载 imagebuilder 和 SDK
今天是2018年9月22日, OpenWrt 适用于 ar71xx/nand 最新稳定版 18.06.1 在这个页面下载(适合于WNDR4300路由器):
http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/
注意,此处只是 Ubuntu 64bit 上示范编译 shadowsocks-openwrt-libev 的过程,不同的路由器的下载目录可能不同
先决条件:
请参阅 OpenWrt Buildroot 页面以安装所需的软件以在SDK上构建软件包
注意:在某些主机上,需要安装ccache包
Ubuntu 编译shadowsocks-libev for OpenWrt 步骤:
-
安装 ccache
sudo apt install ccache
-
下载 OpenWrt-SDK
cd ~/Downloads wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz tar -xf openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz mv openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64 openwrt-sdk-nand cd openwrt-sdk-nand
-
添加 feeds
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
-
获取 shadowsocks-libev Makefile
git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev
-
include/toplevel.mk:136: recipe for target 'menuconfig' failed
-
选择要编译的包 Network -> shadowsocks-libev
make menuconfig
选择
Network --->
回车进入, 光标移动到 shadowsocks-libev-server 按 n 取消选择,Exit
退出退出时会询问:
Do you wish to save your new configuration?
Yes上回车
-
开始编译
make package/shadowsocks-libev/compile V=99
输出文件:
$:~/Downloads/openwrt-sdk-nand/bin$ tree .
.
├── packages
│ └── mips_24kc
│ ├── base
│ │ ├── libmbedtls_2.12.0-2_mips_24kc.ipk
│ │ └── shadowsocks-libev_3.2.0-1_mips_24kc.ipk
│ └── packages
│ ├── libcares_1.14.0-1_mips_24kc.ipk
│ ├── libev_4.24-1_mips_24kc.ipk
│ ├── libpcre_8.42-1_mips_24kc.ipk
│ └── libsodium_1.0.16-1_mips_24kc.ipk
└── targets
└── ar71xx
└── nand
└── packages
├── libatomic_7.3.0-1_mips_24kc.ipk
├── libc_1.1.19-1_mips_24kc.ipk
├── libgcc_7.3.0-1_mips_24kc.ipk
├── libpthread_1.1.19-1_mips_24kc.ipk
├── librt_1.1.19-1_mips_24kc.ipk
└── libstdcpp_7.3.0-1_mips_24kc.ipk
packages\mips_24kc\下 shadowsocks-libev是主文件,除libpcre以外的四个文件是必须依赖,编译科学上网固件时,把相关 ipk 复制到 imagebuilder/packages 目录下就可以了
相关资源:
-
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
-
https://openwrt.org/docs/guide-developer/obtain.firmware.sdk
-
https://openwrt.org/docs/guide-developer/build-system/install-buildsystem
以下是截止2016年4月的内容, 可与上面用SDK编译的方法对照: --------------------
下面是在Ubuntu 64bit下编译shadowsocks-libev for OpenWrt ipk安装包的步骤:
安装依赖库,不同的操作系统版本可能要作相应调整
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext
下载OpenWrt源代码
cd ~/Downloads
git clone git://git.openwrt.org/openwrt.git
下载shadowsocks-libev源码
cd ~/Downloads/openwrt
pushd package
git clone https://github.com/shadowsocks/shadowsocks-libev.git
popd
或者:
cd ~/Downloads/openwrt/package
git clone https://github.com/shadowsocks/shadowsocks-libev.git
编译 DIR505固件2015-12版时用的源码版本是:Date: Tue Dec 22 21:42:40 2015
更新Feeds
使package在make menuconfig中可用,而不是真正安装或编译,并按照自己的路由型号设定target,否则默认target下编译好的工具链在重新设定target后无效
cd ~/Downloads/openwrt
./scripts/feeds update -a
./scripts/feeds install -a
# run make menuconfig and set target;
# Choose your own Target System -> SubTarget -> Target Profile
make menuconfig
make defconfig
先编译要用到的工具和库
make prereq && make tools/install && make toolchain/install
等待时间较长,可以先和大妈一起去跳个广场舞,制造更多噪音恶心一下别人:)
make menuconfig配置选项
# 运行命令
make menuconfig
有三个选项:
- y: 编译进固件
- m: 编译出安装包,但不打包进固件
- n: 排除
输入命令make menuconfig
进入配置程序后:
- Target System:
- Atheros AR7xxx/AR9XXX (Default value,不同的路由器,可能选择不同) 适合: WNDR4300, DIR505A1, TLWR2543
- Subtarget:
- Generic device with NAND flash 适合: WNDR4300
- Generic 适合: DIR505A1
- Target Profile: (因我们只是编译包,这步可以不选)
- Network, 选择shadowsocks-libev 和 shadowsocks-libev-polarssl, 按m设置为编译独立ipk安装包
- Save && Exit
图 make menuconfig
图 选择shadowsocks-libev-polarssl
编译shadowsocks-libev for OpenWrt
make V=99 package/shadowsocks-libev/openwrt/compile
查看编译出的shadowsocks-libev和shadowsocks-libev-polarssl文件
cd ~/Downloads/openwrt/bin/ar71xx/packages/base/
tree
├── libc_1.1.11-1_ar71xx.ipk
├── libgcc_5.2.0-1_ar71xx.ipk
├── libopenssl_1.0.2e-1_ar71xx.ipk
├── libpolarssl_1.3.15-1_ar71xx.ipk
├── libpthread_1.1.11-1_ar71xx.ipk
├── shadowsocks-libev_2.4.3_ar71xx.ipk
├── shadowsocks-libev-polarssl_2.4.3_ar71xx.ipk
└── zlib_1.2.8-1_ar71xx.ipk
# 如果用来编译科学上网固件,把shadowsocks-libev复制到Image Builder目录下:
# for DIR505A1:
cp shadowsocks* ~/Downloads/openwrt-imagebuilder-ar71xx-generic.Linux-x86_64/packages/base
# for WNDR4300
cp shadowsocks* ~/Downloads/openwrt-imagebuilder/packages/base
把文件scp复制到OpenWrt路由器/tmp,就可以 opkg install shadowsocks-libev_2.4.3_ar71xx.ipk
安装了
相关资源:
- https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
- https://openwrt.org/zh-cn/doc/howto/buildroot.exigence
- https://openwrt.org/zh-cn/doc/howto/build
- https://github.com/shadowsocks/shadowsocks-libev
下载和设置OpenWrt路由器科学上网配置文件
自己手工收集编辑科学上网所用到的配置文件是件比较累的事情。最快的方法是 git clone 本项目,修改其中某些选项
下载科学上网配置文件
cd ~/Downloads
git clone https://github.com/softwaredownload/openwrt-fanqiang
默认配置文件目录:openwrt-fanqiang/openwrt/default
针对特定路由器的配置文件目录,以路由器型号为目录名,如 openwrt-fanqiang/openwrt/wndr4300
复制配置文件,以wndr4300路由器为例:
-
本地建立配置文件目录,如 ~/Downloads/openwrt-wndr4300
-
复制默认配置文件到 ~/Downloads/openwrt-wndr4300
mkdir ~/Downloads/openwrt-wndr4300 # Linux下复制默认配置文件 cp -R ~/Downloads/openwrt-fanqiang/openwrt/default/* ~/Downloads/openwrt-wndr4300/ # 复制WNDR4300路由器的特定配置文件,同名文件就覆盖 cp -R ~/Downloads/openwrt-fanqiang/openwrt/wndr4300/* ~/Downloads/openwrt-wndr4300/
修改配置文件,编译后就直接可以用了。否则刷上固件后登录路由器再修改。主要修改如下文件:
~/Downloads/openwrt-wndr4300/etc/shadowsocks-libev/config.json
~/Downloads/openwrt-wndr4300/usr/bin/ss-firewall-asia
~/Downloads/openwrt-wndr4300/etc/uci-defaults/defaults
-
shadowsocks.json 中 server必须改成你的服务器实际IP
-
defaults 中wan-username 和 wan-password必改
-
ss-firewall 中 1.0.9.8必须改成你的服务器实际IP
-
编译自定义固件时,设置FILES=~/Downloads/openwrt-wndr4300
自定义配置文件用途说明
定制固件的前提是你要有一台服务器运行shadowsocks服务端ss-server
- etc/dnsmasq.conf 设置dnsmasq配置文件目录
- etc/shadow 登录路由器的密码, 默认是fanqiang
- etc/uci-defaults/defaults 默认上网设置及时区等设置
关于 /etc/uci-defaults目录
uci-defaults目录下的文件会在路由器第一次启动时由/etc/init.d/boot执行,如果在文件末尾加上exit 0, 则执行就会删除此文件,否则执行成功则删除,不成功则在下次启动时继续执行直到成功
我们在这个目录下创建一个defaults文件,在这个文件中设置上网参数,时区等
To set some system defaults the first time the device boots, create a script in the folder
All scripts in that folder are automatically executed by /etc/init.d/boot and if they exited with code 0 deleted afterwards (scripts that did not exit with code 0 are not deleted and will be re-executed during the next boot until they also successfully exit)
默认端口及修改方法(可以不改):
-
shadowsocks服务端监听端口:1098
- 文件位置: 服务器/etc/shadowsocks-libev/config.json
- 如更改,路由器里 /etc/shadowsocks-libev/config.json也相应更改
-
路由器shadowsocks ss-redir 监听端口:7654
- 文件位置: 路由器/etc/shadowsocks-libev/config.json
- 如更改, 路由器/usr/bin/ss-firewall-asia也相应更改
-
路由器shadowsocks ss-tunnel监听端口: 3210
- 文件位置: 路由器/etc/init.d/shadowsocks
- 如更改, 路由器 /etc/dnsmasq.d/gfwlist.conf也相应更改
以上端口建议不改。程序运行稳定后,相关密码可以改掉
端口关联的理解:
- ss-firewall负责把非中国流量转发到本地端口7654
- ss-redir监听端口7654,该端口流量都加密走自己的服务器通道
- dnsmasq把非国内重要域名的dns查询转发本地3210端口
- ss-tunnel监听本地端口3210,把该端口的dns查询转发到自己服务器向8.8.4.4查询
设置可执行权限
chmod +x usr/bin
chmod +x usr/bin/*
chmod +x etc/uci-defaults
chmod +x etc/uci-defaults/defaults
相关资源:
使用Image Builder编译自动科学上网OpenWrt固件
Image Builder又叫Image Generator,利用它我们可以方便地定制适合自己无线路由器的固件
编译OpenWrt自定义科学上网固件的注意事项
- 不要用“root”用户编译
- 进入到编译系统目录中执行编译相关命令,如:~/Downloads/openwrt
- 在编译版的路径中不能够出现空格
- 如果已经用root用户下载并解压了源码,可用命令改属主成普通用户:sudo chown -R user:user ~/Downloads/openwrt
下载适合自己无线路由器的Image Builder, NetGear WNDR4300 为例
-
进入 http://downloads.openwrt.org/
-
选择 Stable Releases或 Development Snapshots
- 目前的 Stable Releases: http://downloads.openwrt.org/releases/18.06.1/targets/
- Development Snapshots: http://downloads.openwrt.org/snapshots/targets/
-
选择 CPU类型,如 ar71xx: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/
-
选择 Flash 类型, 如nand或generic,如果是 WNDR4300 路由器,则选 nand: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/
下载命令举例:
cd ~/Downloads
wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/openwrt-imagebuilder-18.06.1-ar71xx-nand.Linux-x86_64.tar.xz
tar -xf openwrt-imagebuilder-18.06.1-ar71xx-nand.Linux-x86_64.tar.xz
# 为操作方便,重命名为短目录
mv openwrt-imagebuilder-18.06.1-ar71xx-nand.Linux-x86_64 openwrt-imagebuilder-nand
下载包含默认科学上网配置文件的openwrt-fanqiang项目
-
git下载openwrt-fanqiang项目
cd ~/Downloads git clone https://github.com/softwaredownload/openwrt-fanqiang
-
或者下载zip文件
https://github.com/softwaredownload/openwrt-fanqiang/archive/master.zip
本地项目文件夹是: ~/Downloads/openwrt-fanqiang
复制openwrt-fanqiang里面的科学上网配置文件到config-wndr4300目录下
建立一个配置文件夹,以路由器型号结束,如 ~/Downloads/config-wndr4300
cd ~/Downloads
mkdir config-wndr4300
cd openwrt-fanqiang
cp -R openwrt/default/* ~/Downloads/config-wndr4300/
cp -R openwrt/wndr4300/* ~/Downloads/config-wndr4300/
上面的操作,先复制共用的配置文件 openwrt/default/* 到 config-wndr4300目录下
然后复制WNDR4300专用的配置文件(如果存在)到 openwrt/WNDR4300/* 到 config-wndr4300目录下,如果有同名文件就覆盖
如果你要贡献本项目,也是先在openwrt-fanqiang/openwrt目录下先建立路由器型号为名称的文件夹,再把专用的配置文件放到此文夹下。注意文件夹和文件名都是小写的
修改TL-WNDR4300路由器科学上网配置文件
主要修改以下文件:
config-wndr4300/etc/shadowsocks-libev/config.json
config-wndr4300/usr/bin/ss-firewall-asia
config-wndr4300/etc/uci-defaults/defaults
为了方便以后升级,可以写个bash文件自动修改配置文件
一切操作尽量自动化,你甚至可以自动化一切操作:下载ImageBuilder,下载OpenWrt源码,下载shadowsocks-libev源码,同步openwrt-fanqiang源码,编译ipk,修改科学上网设置,编译科学上网固件,早上一觉醒来,新鲜出炉、美味可口的科学上网固件就已经摆放在桌上了
下面是一个自动修改配置文件的例子,从中可以知道需要修改哪些地方。从2015年12月起,可能用于自动化修改的默认值都应该标准化,方便自动化操作
#!/bin/bash
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2015-12-24
REPOSITORY=~/Downloads/openwrt-fanqiang
CONFIG=~/Downloads/config-wndr4300
createdir() {
rm -rf $CONFIG
mkdir $CONFIG
}
copy() {
cp -R $REPOSITORY/openwrt/default/* $CONFIG/
cp -R $REPOSITORY/openwrt/wndr4300/* $CONFIG/
}
setmod() {
chmod +x $CONFIG/usr/bin/*
chmod +x $CONFIG/etc/uci-defaults
chmod +x $CONFIG/etc/uci-defaults/*
}
modify() {
# server ip address
sed -i 's/1.0.9.8/server_ip/' $CONFIG/etc/shadowsocks-libev/config.json
# server_port
sed -i 's/1098/server_port/' $CONFIG/etc/shadowsocks-libev/config.json
# local_port
sed -i 's/7654/7654/' $CONFIG/etc/shadowsocks-libev/config.json
# password
sed -i 's/killgfw/killgfw/' $CONFIG/etc/shadowsocks-libev/config.json
# method
sed -i 's/chacha20-ietf-poly1305/chacha20-ietf-poly1305/' $CONFIG/etc/shadowsocks-libev/config.json
# local_port
sed -i 's/7654/7654/' $CONFIG/usr/bin/ss-firewall-asia
# ppoe username
sed -i 's/wan-username/wan-username/' $CONFIG/etc/uci-defaults/defaults
# ppoe password
sed -i 's/wan-password/wan-password/' $CONFIG/etc/uci-defaults/defaults
# wifi password
sed -i 's/icanfly9876/icanfly9876/g' $CONFIG/etc/uci-defaults/defaults
# root password
sed -i 's/\\nfanqiang/\\nfanqiang/' $CONFIG/etc/uci-defaults/defaults
}
if [ "$1" = "createdir" ]; then
createdir
elif [ "$1" = "copy" ]; then
copy
elif [ "$1" = "setmod" ]; then
setmod
elif [ "$1" = "modify" ]; then
modify
else
echo "usage: createdir copy setmod modify"
fi
自动修改科学上网配置文件用法:
./config-wndr4300.sh createdir
./config-wndr4300.sh copy
./config-wndr4300.sh setmod
./config-wndr4300.sh modify
确定OpenWrt无线路由器的PROFILE值
cd openwrt-imagebuilder
make info
找到自己固件的型号,比如我的是 NETGEAR WNDR4300v1
,它的PROFILE值是WNDR4300V1。如下图:
找出默认应该包含进OpenWrt固件的包
基础包:
对于WNDR4300无线路由器来说,可以这样获取:
echo $(wget -qO - http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/config.seed | sed -ne 's/^CONFIG_PACKAGE_\([a-z0-9-]*\)=y/\1/ip')
由于 OpenWrt开发非常活跃,不同版本的基础包可能是不同的
2018-09的基础包:
libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd
默认包:
运行命令:
make info
在顶部会列出:
Current Target: "ar71xx (Generic devices with NAND flash)" Default Packages:
base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c
所有型号路由器共用包:
Default:
Default Profile
Packages:
kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport
特定路由器型号专属包,列出在PROFILE的下面,对于 WNDR4300V1:
kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
自定义包(shadowsocks-libev 后面四个包是依赖):
ipset ipset-dns wget bind-dig iptables-mod-tproxy kmod-ipt-tproxy ip-full stubby dnsmasq-full simple-obfs libmbedtls libcares libev libsodium shadowsocks-libev
-
libmbedtls libcares libev libsodium shadowsocks-libev
shadowsocks-libev 及依赖,需要自己编译
-
simple-obfs 是 shadowsocks-libev 混淆插件,需要自己编译
-
stubby 可用于 DNS over TLS
-
iptables-mod-tproxy kmod-ipt-tproxy ip-full 用于防火墙 UDP 转发
-
dnsmasq-full 需要配合 shadowsocks 客户端 ss-tunnel 使用
Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由
默认的dnsmasq为base版本,该版本不能对特定的域名地址进行标记操作(因为我们需要对一些特定域名如twitter等进行标记),改为更加强大的dnsmasq-full
-
bind-dig 可以调试域名解析
如果你的openWrt版本是 ATTITUDE ADJUSTMENT,可能加上iptables-mod-nat-extra包,如果没安装的话iptables的端口转发会不支持
上述包整合在一起并去重复。简单方法是复制到 Sublime Text, 以空格分隔,再用正则把空格 替换成 \n, 然后 Edit -> Permute Lines -> Unique
注意,在编译前要把自己编译的 shadowsocks-libev 及其他要用到的 .ipk 文件放到ImageBuilder的目录下packages
OpenWrt Image Builder的三个命令行参数
- PROFILE 指定设备型号,此处是 WNDR4300V1
- PACKAGES 指定要编译进固件的包
- FILES 指定要编译进固件的自定义文件,如网络有关配置文件, 自定义包,我们放在 ~/Downloads/config-wndr4300 目录下了
要排除的package 写在最后面,格式是
-package
开始编译OpenWrt自动科学上网固件
cd ~/Downloads/openwrt-imagebuilder-nand
make image PROFILE=WNDR4300V1 PACKAGES="libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport ipset ipset-dns wget bind-dig iptables-mod-tproxy kmod-ipt-tproxy ip-full stubby dnsmasq-full simple-obfs libmbedtls libcares libev libsodium shadowsocks-libev -dnsmasq" FILES=~/Downloads/openwrt-wndr4300
注意,我们已经使用了 dnsmasq-full
,就不需要用 dnsmasq
, 用 -dnsmasq
排除,否则可能会有编译错误
编译好的的固件在ImageBuilder的bin/targets/ar71xx/目录下
然后把编译出的固件刷进路由器,重启路由器后后就能免设置智能科学上网
刷科学上网固件后管理员登录OpenWrt
刷好固件并重启路由器后,电脑连上无线网络, 然后就可用密码fanqiang
登录路由器
- ssh登录openwrt管理路由器: ssh root@192.168.1.1
- 浏览器打开192.168.1.1登录
以后玩OpenWrt出问题,可以重新刷上这个科学上网固件就又可以在网上畅行无阻了
相关资源:
- https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
- https://openwrt.org/docs/guide-user/additional-software/imagebuilder
- https://openwrt.org/zh-cn/doc/howto/obtain.firmware.generate
- https://openwrt.org/docs/guide-developer/build-system/use-buildsystem
如何使用别人预编译的OpenWrt科学上网固件 for TP-LINK WR2543N (包含shadowsocks-libev)
如果你的无线路由器和我的一样,也是 TP-LINK wr2543N v1,你不想自己编译固件,那么可以下载我预先编译好的固件,刷好固件好,稍微设置下,就可以自动科学上网
在下载和刷OpenWrt固件前,确保熟悉本教程的前面部分,已经配置好shadowsocks-libev服务端,并能自由进入路由器的安全模式。再次强调,刷机有风险,风险自承担
该固件只是在OpenWrt trunk版加上:luci-ssl wget shadowsocks-libev的最新版,还有科学上网要用到的配置,没有添加其他任何内容
科学上网默认配置
下载OpenWrt固件 for TP-LINK wr2543N
下载后保存在Ubuntu: ~/Downloads/openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin
复制OpenWrt固件到路由器
scp ~/Downloads/openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/
登录OpenWrt路由器,并查看文件大小是否正确
ssh root@192.168.1.1
root@OpenWrt: cd /tmp/
ls
升级OpenWrt固件(不保留原来配置)
root@OpenWrt:/tmp# sysupgrade -n openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin
路由器重启后,电脑连接到无线网络 eastking-wr2543
ssh登录并修改设置:
ssh root@192.168.1.1
输入密码 fanqiang
登录
有时会提示错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
cf:c5:12:34:56:0b:4d:1c:56:48:6a:87:04:cf:b8:83.
Please contact your system administrator.
Add correct host key in /home/openwrt-fanqiang/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/openwrt-fanqiang/.ssh/known_hosts:3
remove with: ssh-keygen -f "/home/openwrt-fanqiang/.ssh/known_hosts" -R 192.168.1.1
RSA host key for 192.168.1.1 has changed and you have requested strict checking.
Host key verification failed.
解决办法就是复制并运行提示中的清理命令:
ssh-keygen -f "/home/openwrt-fanqiang/.ssh/known_hosts" -R 192.168.1.1
以下设置必须修改:
- /etc/shadowsocks-libev/config.json
- server必须改成你的服务器实际IP
- /etc/config/network
- wan-username 和 wan-password必改
- /usr/bin/ss-firewall-asia
- 1.0.9.8必须改成你的服务器实际IP
如果你还改了其他默认值,请自行修改相应文件。不建议修改其他默认值,以提高一次成功率
执行以下命令使修改生效
root@OpenWrt:~# /etc/init.d/shadowsocks stop
root@OpenWrt:~# /etc/init.d/shadowsocks start
#root@OpenWrt:~# /etc/init.d/network restart
测试一下是否可以在网上畅行无阻了
本教程已经在github开源,欢迎提交改进,报告bug: https://github.com/softwaredownload/openwrt-fanqiang
相关资源:
Ubuntu 安装 shadowsocks Simple-obfs 插件客户端配置
用shadowsocks科学上网,为什么还要用混淆插件
普通用户上网,多数是访问的 http://kige.com 或 https://kige.com 这样的网址,每个人访问了什么页面,有关方面是一清二楚,毫无秘密可言
用了 shadowsocks 加密访问以后,白脸知道我们访问了海外的某个 IP 地址,并不知道我们通地这个 IP 地址在做什么,比如访问了什么页面,页面上有什么,他们是不知道的
有人推测,如果较多的流量访问海外某 IP 不常用端口,可能会被怀疑,你不浏览网页(他们不知道你是在科学上网浏览网页),这是在干啥呢,难道是不是良民?
于是有人就提出一个混淆流量的设想,把 shadowsocks 加密后的流量混淆一下,白脸喜欢在管理后台偷偷观察我们在网上干什么,加密的数据再混淆一下,白脸在后台看到我们只是在普通的上网,有时打开我们经常上的网站看开一下,一个美女也没有,又是一个无趣至极的人!!
Simple-obfs 就是 shadowsocks 的一个混淆流量的插件
Ubuntu 给 shadowsocks-libev 安装 simple-obfs 混淆流量插件
安装环境: Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-34-generic x86_64)
sudo apt-get install simple-obfs
Preparing to unpack .../simple-obfs_0.0.5-2_amd64.deb ...
Unpacking simple-obfs (0.0.5-2) ...
Setting up simple-obfs (0.0.5-2) ...
打印一下命令行选项:
obfs-server --help
-s <server_host> Host name or IP address of your remote server.
-p <server_port> Port number of your remote server.
-l <local_port> Port number of your local server.
-r <addr>:<port> Forward traffic to this remote server address.
--obfs <http|tls> Enable obfuscating: HTTP or TLS (Experimental).
[-a <user>] Run as another user.
[-f <pid_file>] The file path to store pid.
[-t <timeout>] Socket timeout in seconds.
[-c <config_file>] The path to config file.
[-n <number>] Max number of open files.
[-b <local_address>] Local address to bind.
[-6] Resovle hostname to IPv6 address first.
[-d <addr>] Name servers for internal DNS resolver.
[--fast-open] Enable TCP fast open.
with Linux kernel > 3.7.0.
[--mptcp] Enable Multipath TCP on MPTCP Kernel.
[-v] Verbose mode.
[-h, --help] Print this message.
Linux Ubuntu server Showdosocks-libev 启用 siimple-obfs 混淆插件
kige@ubuntu:~$ cd /etc/shadowsocks-libev
kige@ubuntu:/etc/shadowsocks-libev$ ls
config.json config-obfs.json
查看一下 config.obfs.json 的默认设置:
cat config.obfs.json
{
"server":"127.0.0.1",
"server_port":8388,
"local_port":1080,
"password":"veotFuFl",
"timeout":600,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open":true,
"plugin":"obfs-server",
"plugin_opts":"obfs=tls;failover=127.0.0.1:8443;fast-open"
}
我们要把 simple-obfs 作为 shadowsocks-libevr 的插件使用,shadowsocks-libev 的默认配置文件是 config.json,所以要把 config.obfs.json 的内容合并到 config.json:
# nobfs means not obfsed
sudo cp config.json config.nobfs.json
sudo cp config.obfs.json config.json
sudo vi config.json
# 修改成类似如下值
{
"server": ["[::0]", "0.0.0.0"],
"server_port": 1098,
"password": "killgfw",
"timeout": 600,
"method": "chacha20-ietf-poly1305",
"mode": "tcp_and_udp",
"fast_open": true,
"ipv6_first": true,
"plugin": "obfs-server",
"plugin_opts": "obfs=http;fast-open=true"
}
其中 server_port, password, method 可以自定义一下
["[::0]", "0.0.0.0"]
意思是让 simple-obfs 服务端监听本地,优先IPv6
操作系统开启 TCP fast_open 后才能在 config.json | shadowsocks.json 中设置
"fast_open": true
TFO开启成功以后,shadowsocks服务端和客户端数据交换的速度会更快一点,也就是科学上网会更加流畅一些
设置 Linux nginx 反向代理到 obfs-server
假设你的服务端已经安装了 nginx,并有了默认网站 kige.com, /etc/nginx/sites-availabe/kige.com 是你的网站配置文件
先备份一下原来的网站配置文件:
cd /etc/nginx/sites-available
sudo cp kige.com kige.com.nobfs
nobfs means not obfsed
到域名管理面板给网站 kige.com 增加一个子域名,这里是 32.kige.com
ping 32.kige.com
如果正常,ping 子域名可以看到服务端 IP 和响应时间
在 /etc/nginx/sites-available/kige.com
文件中加入一个新的 server 段代表新建的子域名。为了管理方便,我们不把设置加到既有 server 段中。反向代理主要设置在 / location {}
里
首先要理解 反向代理 的概念。我们浏览一个网页,一般是通过 nginx 把内容传送到我们的计算机上,这是从服务端 nginx 到我们计算机的数据流动,这种情况可以视为 正向代理,nginx 充当了信息传递的代理人
反向代理时,nginx 不是向外部的我们传递数据,而是向内部的一个程序传递数据,方向是不是反过来了?在这里,nginx 是向 simple-obfs 的服务端 obfs-server 传递数据
下面开始编辑 /etc/nginx/sites-available/kige.com,添加一个 server 段
sudo vi kige.com
# reverse proxy settings in / location field
server {
listen 80;
server_name 32.kige.com;
charset utf-8;
gzip on;
keepalive_timeout 120s;
location / {
if ($http_upgrade = "") {
return 301 https://www.kige.com$request_uri;
}
proxy_pass http://[::0]:1098;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
下面是 https 版本的加密反向代理(2024-08-19):
server {
server_name kige.com;
listen [::]:443 ssl;
listen 443 ssl;
location / {
if ($http_upgrade = "") {
return 301 https://kige.com$request_uri;
}
proxy_pass http://[::1]:1096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
ssl_certificate /etc/letsencrypt/live/kige.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kige.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host ~ ^[^.]+\.kige\.com$) {
return 301 https://kige.com/;
}
listen 80;
listen [::]:80;
server_name kige.com;
}
注意,nginx 配置是空格比较敏感的,if (
中间有个空格
reverse proxy 反向代理用到 nginx 的一个模块,一般 nginx 版本已经自带,用法见下面的链接
相关资源:
- https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
- https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching
- http://nginx.org/en/docs/http/websocket.html
- https://github.com/shadowsocks/simple-obfs/
- https://github.com/aa65535/openwrt-simple-obfs
- https://zenandidi.com/archives/1789
SS的simple-obfs 是什么意思,有什么用
shadowsocks obfs什么意思?nginx 成为科学上网服务端的前台
要正确配置好 simple-obfs 混淆插件的前提是深刻理解其工作原理
要深刻理解流量混淆插件的工作原理,前提是对 nginx 在其中起到的作用有正确的认识
在没有启用 simple-obfs前,shadowsocks 服务端 ss-server 站在前台和客户端:ss-local ss-redir ss-tunnel 直接交换数据,于是 ss-server 就有可能暴露,被白脸认出来
启用 simple-obfs 流量混淆插件后,科学上网服务端应该分成二部分:
- 科学上网服务端前台 nginx
- 科学上网服务端后台 obfs-server 和 ss-server
看到了吗,nginx 成了科学上网服务端的重要组成部分,明白了这点,你就可能明白了大半
shadowsocks的simple-obfs有什么用?科学上网服务端暴露在外的是 nginx ,众所周知,nginx 是提供 http https服务的,走的是 TCP 协议,外部只可能看到 nginx,不可能看到后面的 ss-server 和 obfs-server,正是因为这样,从理论上来说,提高了科学上网的安全性
科学上网数据交流程
于是我们很容易就得到科学上网数据交流的流程
- nginx 在前台和科学上网客户端交换数据
- 在服务端内部,nginx 和 simple-obfs 服务端 obfs-server 交换数据
- 数据混淆服务端 obfs-server 和加密服务端 ss-server 交换数据
谁在监听什么端口
我们设置了 "server_port": 1098
这个 1098 端口是谁在监听的呢
nginx 对外提供 http 服务,默认监听的是 TCP/80 端口
nginx 接收到外部数据,如果是反向代理的数据,就把数据传递给 "server_port": 1098
,nginx 并不关心谁在 TCP/1098 接收数据
这个 1098 端口是 obfs-server 在监听的,也就是交由 obfs-server 来处理数据
obfs-server 一个人完成不了处理数据的任务,还要和 ss-server 合作,ss-server 会在一个随机的 TCP 端口和 obfs-server 交换数据
obfs=http
是什么意思
不能理解成只有访问类似 http://kige.com 这样的网站才混淆,实际上不管你访问的是 http 还是 https,流量都加密并混淆,只不过白脸看到的可能是http流量
simple-obfs 只混淆 TCP 数据吗
问:听说 shadowsocks 的 simple-obfs 流量混淆插件只是混淆 TCP 数据,不混淆UDP数据
为什么?
答:不用问得那么清楚吧,有的时候朦胧一点不是更好吗:)
obfs-server 处理的数据来自 nginx TCP/80 端口接收到的数据,决定权在大哥 nginx 那里,obfs-server 就是想要接收 UDP 数据,也要大哥点头才行呢
如果客户端需要 UDP 协议进行 DNS 查询,又该如何是好
如果客户端需要 UDP 查询 DNS,可以使用 dns-forwarder 将其转换为TCP查询。如果要从UDP传递数据,可以使用不同的本地代理例如kcptun,或者直接利用 simple-obfs 承载openvpn 数据
客户端能不能将 DNS 查询请求通过 UDP 发送到服务端,由服务端进行查询
shadowsocks-libev 服务端启用 simple-obfs 插件后,默认服务端工作在 TCP 协议
如果需要 ss-server 接收 UDP数据,可以在 config.json 中加入
"mode": "tcp_and_udp"
这个选项目前只能用于配置文件 config.json 方式启动 ss-server
当你指定了 "mode": "tcp_and_udp" 后,ss-server 也会监听、处理 UDP 数据
相关资源:
OpenWrt SS Simple-obfs 混淆教程
这里可以下载编译好的 Simple-obfs for OpenWrt shadowsocks-libev:
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
编译、使用环境:
- 操作系统: Ubuntu 64 bit
- OpenWrt版本: 18.06.1
- 路由器: NetGear WNDR4300
怎样下载OpenWrt DK
您可以下载已编译的SDK,也可以使用“make menuconfig”命令自行编译
如果编译 ipk 所使用的 OpenWrt 版本和路由器的 OpenWrt 版本不同,那么可能会有兼容性问题。为了确保兼容, 我们在同一个页面下载 imagebuilder 和 SDK
今天是2018年9月24日,适合于WNDR4300路由器 的 SDK 下载地址为: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/
先决条件:
请参阅OpenWrt Buildroot页面以安装所需的软件以在SDK上构建软件包
注意:在某些主机上,需要安装ccache包
Ubuntu 下编译 simple-obfs ipk 详细过程
-
安装 ccache
sudo apt-get install ccache
-
下载 OpenWrt-SDK
cd ~/Downloads wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz tar -xf openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz mv openwrt-sdk-18.06.1-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64 openwrt-sdk cd openwrt-sdk-nand
-
添加 feeds
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
-
获取 simple-obfs Makefile
git clone https://github.com/aa65535/openwrt-simple-obfs.git package/simple-obfs
-
include/toplevel.mk:136: recipe for target 'menuconfig' failed
-
选择要编译的包 Network -> shadowsocks-libev
make menuconfig
选择
Network --->
回车进入, 选择simple-obfs
-
开始编译
make package/simple-obfs/compile V=99
把 openwrt-sdk-nand/packages/mips_24kc/base 下的 simple-obfs_0.0.5-3_mips_24kc.ipk 复制到 imagebuilder/packages 目录下就可以编译进科学上网固件
OpenWrt 路由器安装 simple-obfs
scp simple-obfs.ipk root@192.168.1:/tmp/
ssh root@192.168.1.1
cd /tmp/
opkg install simple-obfs
查看一下 simple-obf客户端 obfs-local 参数:
obfs-local -h
simple-obfs 0.0.5
maintained by Max Lv
usage:
obfs-local
-s <server_host> Host name or IP address of your remote server.
-p <server_port> Port number of your remote server.
-l <local_port> Port number of your local server.
--obfs <http|tls> Enable obfuscating: HTTP or TLS (Experimental)
--obfs-host <host_name> Hostname for obfuscating (Experimental).
--obfs-uri <uri_path> HTTP path uri for obfuscating (Experimental).
[-a <user>] Run as another user.
[-f <pid_file>] The file path to store pid.
[-t <timeout>] Socket timeout in seconds.
[-c <config_file>] The path to config file.
[-n <number>] Max number of open files.
[-b <local_address>] Local address to bind.
[--fast-open] Enable TCP fast open.
with Linux kernel > 3.7.0.
[--mptcp] Enable Multipath TCP on MPTCP Kernel.
[-v] Verbose mode.
[-h, --help] Print this message.
OpenWrt路由器配置 simple-obfs obfs-local ss-redir 正确上网姿势
# 登录 OpenWrt 路由器
root@192.168.1.1
cd /etc/
cp shadowsocks.json shadowsocks.nobfs.json
vi shadowsocks.json
# 改成类似如下的值:
{
"server": "32.kige.com",
"server_port": 80,
"password": "killgfw",
"local_port": 7654,
"method": "chacha20-ietf-poly1305",
"timeout": 600,
"fast_open": true,
"plugin": "obfs-local",
"plugin_opts": "obfs=http;obfs-host=32.kige.com;fast-open"
}
深刻simple-obfs 客户端 obfs-local 参数用法
-
"server": "32.kige.com"
服务端地址,这里写了域名,也可以写 IP 地址
-
"server_port": 80
还记得吗,没有使用混淆数据插件 simpe-obfs 时,我们默认的 server_port 是 1098,那时的1098端口是可以自定义的,现在的 80 端口是固定的
因为 obfs-local 要把数据发送到服务端 nginx http 服务监听的 80 端口,如果你写成 87 端口,nginx 是接收不到数据的,那么客户端和服务就无法交换数据,何谈科学上网
明显,这里 obfs-local 在和服务端交换数据时在站前面,shadowsocks-libev 客户端 ss-redir 隐在后面
-
"local_port": 7654
这是 ss-redir 在本地监听的端口,可以自定义,只要和 /usr/bin/ss-firewall-asia 转发数据的端口一致就可以了
iptables 把需要加密和混淆的数据发到路由器 7654 端口,ss-redir 收到后和再和 obfs-local 一起加密和混淆数据,再由 obfs-local 发送到 32.kige.com:80
-
"method": "chacha20-ietf-poly1305"
升级版数据加密算法,被检测出数据特征的概率较小
如果用
xchacha20-ietf-poly1305
则更为安全,是目前最安全的加密算法,不过可能比 chacha20-ietf-poly1305 消耗更多的计算资源 -
"fast_open": true
操作系统开启 TCP fast_open 后才能在 config.json | shadowsocks.json 中设置
"fast_open": true
TFO开启成功以后,数据交换的速度会更快一点
相关资源:
- https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
- https://xwvut.software-download.name/
Windows科学上网最好方法:shadowsocks-libev + simple-obfs + TFO教程
shadowsocks Windows客户端有哪些
Shadowsocks 有好几种Windows客户端:
- Shadowsocks Windows
- Shadowsocks QT5
- Outline Google 开发,因为 Google 擅长收集个人隐私,不推荐使用
shadowsocks-libev 作为资源占用最少的 shadowsocks 实现,官方却不提供 Windows 预编译可执行文件下载,虽然他们知道 Windows 用户最多,但是开发者可能倾向于 Mac Linux 多一点,也就忽视了 Windows 用户的需求:Windows 用户如果有需要,可以自己修改编译,是不是
shadowsocks 官方建议大家在Windows下用 docker,一个 docker 社区版 500 多 MB,如果是仅仅为了使用才丁点大的 shadowsocks-libev,有必要安装这么大的东东吗
还好 cokebar 自己编译了 Windows 下的 shadowsocks-libev 和 simple-obfs,下面我们来看看怎么在 Windows PC 上用这两者科学上网
Windows 10 开启 TCP Fast Open
下面的示范包含了 TFO,TFO要操作系统支持才行,因为科学上网软件要调用操作系统的API
请注意:
TCP Fast Open(TFO)仅适用于Windows 10, 1607或更高版本(精确地,build> = 14393)
怎么知道自己的 Windows 10的版本号?
按 Windows + R键,输入 winver
回车
上图显示版本1803,build 17134.285
如果您使用的是1709(内部版本16299)或更高版本,则还需要手动开启
-
按 Windows + X
-
选择 Command Prompt(Admin) 或者 Windows PowerShell(Admin) - 打开控制台(管理员)
-
运行命令:
netsh int tcp set global fastopenfallback=disabled
-
重启系统以后,验证 TFO 是否已经开启:
netsh interface tcp show global
其中
fast open: enabled
说明 TCP fast open 已经启用
下载 shadowsocks-libev simple-obfs Windows binary可执行文件
https://software-download.name/2018/shadowsocks-libev-windows-binary-download/
我下载的是64位版本,并重命名为 ss-local.exe obfs-local.exe
shadowsocks-libev + simple-obfs + TFO 服务端设置
路由器 停止 shadowsocks-libev 科学上网服务
如果你已经按照本教程设置了路由器科学上网,那么在测试 Windows PC 客户端科学上网前,首先要停止路由器里面的 shadowsocks-libev
root@192.168.1.1
kige@Openwrt:~# /etc/init.d/shadowsocks stop
更改网络连接设置
假设你的电脑是 WIFI 上网,原来通过路由器科学上网时,我们指定了WIFI连接的静态 IP,并把DNS设为路由器的内网 IP,现在要改成动态分配IP,自动获取DNS
-
按 Windows 键,输入
control panel
回车打开控制面板 -
选择 View ntetwork status and tasks
-
点击连上的 WIFI 连接
-
点击 Properties (属性)
-
点击 Internet Protocol Version 4(TCP/IPv4)
-
选择 Obtain an IP address automatically(自动获取IP地址), Obtain DNS server address automatically(自动获取DNS服务器地址),OK(确认)
shadowsocks-libev + simple-obfs for Windows 客户端设置
更改网络连接设置后,确认能上国内网站,上不了 https://youtube.com
首先创建一个配置文件 shadowsocks.json
{
"server": "1.0.9.8",
"server_port": 80,
"password": "killgfw",
"local_port": 7654,
"method": "chacha20-ietf-poly1305",
"timeout": 600,
"fast_open": true,
"plugin": "obfs-local",
"plugin_opts": "obfs=http;obfs-host=32.kige.com;fast-open"
}
这个配置文件其实和 OpenWrt 路由器编译使用 Simple-obfs for shadowsocks-libev 混淆插件科学上网 是一样的,默认把这个文件放在 ss-local.exe obfs-local 同一目录,这样写命令行时可以简短一些
其中 "local_port": 7654
指的是 ss-local 监听本机的 7654 端口,其他软件转发到这个端口的请求都由 ss-local 接收
Windows PC上用 shadowsocks-libev + simple-obfs + TFO 科学上网调试
按 Windows + X,然后选择 Command Prompt 可以打开控制台,默认目录是 C:\Users\your_name>
可以用cd命令进入要操作的目录,或者把文件复制到 C:\Users\your_name>
下
Windows 10 修改相应设置后,按住 Shift 再在目录里右击,可以在当上目录打开控制台
建议安装 Git for Windows,安装时选择 OpenSSH,然后在任何目录右击,可以打开当前目录的控制台,这个控制台的操作习惯和 Linux 类似,另外可以和 Linux 下一样的方式操作 ssh
先打印一下 ss-local 的命令行选项,如果我们用了无效的选项,ss-local 会直接退出
C:\shadowsocks-libev\64> ss-local -h
shadowsocks-libev 3.2.0
maintained by Max Lv and Linus Yang
usage:
ss-local
-s <server_host> Host name or IP address of your remote server.
-p <server_port> Port number of your remote server.
-l <local_port> Port number of your local server.
-k <password> Password of your remote server.
-m <encrypt_method> Encrypt method: rc4-md5,
aes-128-gcm, aes-192-gcm, aes-256-gcm,
aes-128-cfb, aes-192-cfb, aes-256-cfb,
aes-128-ctr, aes-192-ctr, aes-256-ctr,
camellia-128-cfb, camellia-192-cfb,
camellia-256-cfb, bf-cfb,
chacha20-ietf-poly1305,
xchacha20-ietf-poly1305,
salsa20, chacha20 and chacha20-ietf.
The default cipher is chacha20-ietf-poly1305.
[-a <user>] Run as another user.
[-f <pid_file>] The file path to store pid.
[-t <timeout>] Socket timeout in seconds.
[-c <config_file>] The path to config file.
[-i <interface>] Network interface to bind.
[-b <local_address>] Local address to bind.
[-u] Enable UDP relay.
[-U] Enable UDP relay and disable TCP relay.
[--reuse-port] Enable port reuse.
[--fast-open] Enable TCP fast open.
with Linux kernel > 3.7.0.
[--acl <acl_file>] Path to ACL (Access Control List).
[--mtu <MTU>] MTU of your network interface.
[--no-delay] Enable TCP_NODELAY.
[--key <key_in_base64>] Key of your remote server.
[--plugin <name>] Enable SIP003 plugin. (Experimental)
[--plugin-opts <options>] Set SIP003 plugin options. (Experimental)
[-v] Verbose mode.
[-h, --help] Print this message.
然后在命令行输入:
ss-local -c shadowsocks.json -v
注意,我们启用了 -v
以在控制台打印出活动记录,这在调试时十分有用,调试完成后可以去掉这个选项
控制台显示类似下面的信息:
C:\shadowsocks-libev\64> ss-local -c shadowsocks.json -v
2018-10-01 11:28:48 INFO: plugin "obfs-local" enabled
2018-10-01 11:28:48 INFO: using tcp fast open
2018-10-01 11:28:48 INFO: initializing ciphers... chacha20-ietf-poly1305
2018-10-01 11:28:48 INFO: listening at 127.0.0.1:7654
2018-10-01 11:28:48 [simple-obfs] INFO: using tcp fast open
2018-10-01 11:28:48 [simple-obfs] INFO: obfuscating enabled
2018-10-01 11:28:48 [simple-obfs] INFO: obfuscation http method: GET
2018-10-01 11:28:48 [simple-obfs] INFO: obfuscating hostname: 32.kige.com
2018-10-01 11:28:48 [simple-obfs] INFO: listening at 127.0.0.1:57373
显示 ss-local 启用了 obfs-local 插件,应用了 tcp fast open, 并监听在本机 7654 端口。obfs-local 应用了 tcp fast open,应用了混淆,并监听在本机随机端口和 ss-local 通信
这时我们打开浏览器,能科学上网吗?显然不能,因为浏览器并不知道 ss-local 监听在本机 7654端口,更不会把请求发送到那里,怎么可能科学上网呢
设置 Chrome 浏览器科学上网
接下来我们得告诉浏览器把请求转发到 本机 7654 端口
假设你已经安装了 Chrome 浏览器
-
按 Windows 键,输入 chrome,在出来的 Google Chrome 图标上点右键
-
选择
Open File Location
打开文件所在位置 -
这时会打开 Chrome 快捷方式所在文件夹,并默认选中,Ctrl + C 复制
-
来到桌面,Ctrl + V 粘贴,把刚粘贴的快捷方式重命名为 Proxy
-
在 Proxy 图标上右击,选 Properties 属性
-
在 Target (目标)后面加一个英文空格,再加上下面的内容:
--proxy-server=socks5://127.0.0.1:7654
设置好以后,退出已经打开的 Chrome,点击这个 Proxy(Chrome),然后 浏览 https://youtube.com
如果设置都正确,应该科学上网无障碍了。这是本浏览器内全局科学上网,不区分国内、国外 IP,挺好,否则打开有些外网会很慢或者根本打不开
这时 DNS 是谁在解析呢?我们曾在 OpenWrt 路由器里设置 ss-tunnel 把域名解析请求发送到 shadowsocks 服务端,服务端把解析结果返回到客户端,从而避免了域名污染
客户端用 ss-local 的时候,由 ss-local 自动把域名解析请求发送到服务端了,不需要我们干预。在路由器里也可以用 ss-local 来代替 ss-redir + ss-tunnel + dnsmasq 三者,不过这样的话国内域名的解析也发到了服务端,浏览国内网站会有一些延迟
Windows PC 浏览器科学上网最佳方法总结
- 设置 ss-local 随机启动
- 桌面放二个 Chrome 图标,一个重名为 Proxy 用来科学上网,另一个命名为 Chrome不科学上网
- 浏览外网,关闭打开的 Chrome,再运行 Proxy
- 浏览内网,关闭打开的 Proxy,再运行 Chrome
- 广告屏蔽可以用 host 文件和浏览器插件
shadowsocks-libev + simple-obfs 占用资源极少,电脑随机启动占用的资源可以忽略不计
本文所述方法是Windows PC浏览器科学上网最佳方法,适合主要用浏览科学上网的用户。如果是路由器科学上网,如果打开较多网页,路由器计算资源有限,会有压力
如果电脑有较多的需要科学上网的软件,需要分别设置代理地址,稍显麻烦,路由器科学上网会比较方便
相关资源:
- https://github.com/shadowsocks/simple-obfs/releases/
- Shadowsocks-libev, simple-obfs for Windows 下载 (支持TFO)
- Shadowsocks-libev, simple-obfs for Windows 下载 (不支持TFO)
- https://xwvut.software-download.name/
Windows shadowsocks 客户端配置 simple-obfs 科学上网
在 Windows 上使用 Shadowsocks 客户端科学上网时,在有的地区如果不用插件,那么科学上网可能被干扰。本文就说一下 Windows 上 Shadowsocks 和 Simple-obfs 混淆插件的配合使用
下载 Shadowsocks Windows 客户端
下载 simple-obfs Windows
把 64/ss-local.exe 或 32/ss-local.exe 放到 Shadowsocks.exe 同目录,注意,是 ss-local.exe 和 Shadowsocks.exe 同目录
我是 Windows 10,用的是 64/ss-local.exe
配置 Shadowsocks Windows
假设你的Windows 系统已经开启了 Fast Open
- 服务器端口(Server Port):80
- 插件程序(Plugin Program): ss-local
- 插件选项(Plugin Options): obfs=http;obfs-host=32.kige.com;fast-open
把 32.kige.com 换成你实际使用的域名
相关资源:
- Linux 服务器安装 Simple-obfs 混淆插件
- Simple Obfs 混淆插件的工作原理
- OpenWrt 路由器使用 Simple Obfs混淆插件
- Windows科学上网最好方法:shadowsocks-libev + simple-obfs + TFO教程
- https://github.com/shadowsocks/simple-obfs
- Shadowsocks-libev, simple-obfs for Windows 下载 (不支持TFO)
- https://xwvut.software-download.name/
无线路由器刷OpenWrt固件的准备工作
在给你的路由器刷新固件之前,有必要先了解:
- 什么是无线路由器固件
- 准备支持OpenWrt路由器
- 如何备份路由器配置
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
什么是无线路由器固件
网络的本质是知识的开放与共享。人类社会进步速度,如果原来是自行车速,加上网络后,就坐上了火箭
一个热爱学习的人,必然要查找一些英文学习资料,在某个国家的某个阶段必然会遇到一个问题:怎么Google搜索这么烂,经常打不开,YouTube真差劲,加载半天还在打转...
后来,可能会发现,不是人家烂,而是有人故意为之
怎么办呢?有很多种办法解决这个问题,其中一个较好的方案是从家用无线路由器上解决,然后全部有线和无线设备都可以无障碍上网了
路由器的原厂固件限制了用户自行开发功能,我们必须要给路由器刷上特定的固件,并进行一些设置才可以科学上网
无线路由器就好比是一台小电脑。电脑上安装了Windows XP, Windows 7, Windows 8,或者Ubuntu等操作系统就可以使用了。固件就是给路由器使用的操作系统,是固化在路由器芯片内的操作系统
常用的开源第三方无线路由器固件
-
开源OpenWRT路由器固件:部署复杂、灵活性高
这也是本文系列所用的固件。发展成熟,支持的硬件多
-
开源DD-WRT路由器固件:支持广泛、功能全面
DD-WRT比较实用,通过网页对固件进行配置的功能强大,但是定制和扩展比较困难
-
开源Tomato路由器固件:衍生版本众多
原始版本固件代码自2010年后就再没有更新
本系列教程使用OpenWrt来讲解路由器科学上网方法
相关资源:
支持刷OpenWrt路由器列表推荐
现在移动设备已经普及,一般情况下读者家里都已经有无线路由器了,到底能不能刷上OpenWrt固件呢?到OpenWrt官方网站查一下就知道了
打开 支持OpenWrt无线路由器列表 这个页面,搜索一下。比如我家原来的无线路由器型号是 TP-LINK TL-WR2543N, 同时按下Ctrl+F, 输入 WR2543 就可以找到,如下图:
从上图可以看出,OpenWrt支持 WR2543N 无线路由器版本1。此外,还可以看出更多信息,比如芯片类型是ar71xx, 芯片型号是Atheros AR7242,CPU频率是400 MHz,原厂带8MB Flash, 64MB RAM内存
目前 WR2543N已经比较少见。如果你购买其他品牌,建议Flash在8 MB或以上, RAM在64MB以上
如果你准备买新路由器,可以在上面列表中查找OpenWrt推荐路由器型号,能买到的话,再以关键词 型号 OpenWrt 在搜索引擎搜索相关信息,确保你想购买的型号能比较容易地刷上 OpenWrt固件
作为新手来说,推荐使用 D-Link DIR-505, 可能是最便宜的适合学习OpenWrt的路由器
相关资源:
怎样备份原厂路由器配置文件
提示,刷机有风险,如果不当操作,或者有其他意外发生,路由器可能变成砖头,本文系列旨在提供参考,刷机风险由读者自负,作者不承担任何责任,也没有义务提供个别指导
本文作者给 WR2543N 刷 OpenWrt 固件不下10次,因为完全没有经验,有几次刷了后不能进入管理界面,只能用手机3G上网查找解决方案,还好 WR2543N 非常容易进入安全模式,然后重新刷固件,解决了问题。作为初学者,一定要购买容易进入安全模式的路由器
对于本文作者来说,现在已经不需要原厂固件了,但是在第一次刷OpenWrt前,我还是把原厂固件的配置文件作备份,建议读者也是如此
怎样备份原厂固件,WR2543N的原厂说明书说得很详细,建议找出来详细阅读
LAN 和WAN的区别
什么是LAN和WAN,第一次听到这种专业名词容易让人头大
LAN并不是一个单词,而是三个英文单词的缩写:Local Area Network,查出这三个单词的意思,就比较好理解了,就是 本地区域网络 的意思。本地,比如是室内,公司内,办公室内都是本地,也就是LAN是用来连接本地电脑的
WAN,Wide Area Network,广泛区域网络,也就是连向更广泛的外部的网络,一般家用就是通向ADSL modem,再通过ADSL modem连接互联网
路由器通常有多个LAN口,一个WAN口
在WR2543N路由器的后背,有并排4个的网线插口,叫LAN口,单独的一个网线插口叫WAN口,WAN口旁边还有个USB插口。把ADSL的线插在WAN口。备好一根网线,一头插路由器的任意一个LAN口,另一头插电脑
设置电脑LAN口IP地址
路由器和电脑都处在本地网络里面,为了互相区分,本地网络的每台设备都需要有不同的IP地址
本路由器默认 LAN 口 IP 地址是 192.168.1.1, 默认子网掩码是 255.255.255.0
电脑的IP地址要和路由器的不同,我们可以设置电脑的本地IP地址为动态获取。如果手动设置IP地址,那么计算机IP地址必须为192.168.1.X (X)是2到254之间的任意整数),子网掩码须设置为255.255.255.0,默认网关须设置为192.168.1.1
以Windows XP 系统为例,介绍计算机参数的设置步骤
右键单击桌面上的 网上邻居 图标,选择 属性,在打开的 网络连接页面中,右键单击“本地连接”,选择状态,打开“本地连接状态”进行操作。详细步骤请见购机时附带的手册
登录路由器管理界面
打开网页浏览器,在浏览器的地址栏中输入路由器的
IP地址:192.168.1.1,可以看到下图:
所示登录界面,输入用户名和密码(用户名和密码的出厂默认值均为admin),单击确定按钮
备份原厂路由器固件配置文件
登录路由器管理界面后,选择菜单,系统工具→备份和载入配置,可以在如下图所示备份或载入路由器配置文件
配置备份功能可以将路由器的设置以文件形式保存到电脑中,以备下次使用;在升级路由器软件或在载入新的配置文件前备份路由器的原有配置,可以有效防止升级软件或载入新配置文件过程中丢失原有配置的问题
配置载入功能则可以将先前保存的或已编辑好的配置文件重新载入
相关资源:
路由器怎么刷 OpenWrt 固件教程
经过前面的准备,终于要给亲自给路由器刷OpenWrt固件了。有可能失败,有可能成功。一连嘴里念叨FGW (=fuck great wall),一边给自己打气
OpenWrt有必要装中文管理界面吗
我认为不需要。网上最新最全面的信息都是英文的。GFW在不断进步,我们也要不停地学习。我们要感谢GFW,让我们每天多记几个单词。一些步骤的操作,我特意截图并加上了步骤标识,实在记不住就每次打开这个教程照着图示来
在开源的Linux类操作系统里连接OpenWrt进行操作
我认为有必要从现在开始切换到Linux类操作系统了。Windows已经开始走向没落,开源操作系统渐渐赶上闭源商业操作系统
为什么呢?随着技术的不断进化,开源的技术合作越来越方便。打个比方,如果佛教老大释珈牟尼,基督教创始人耶稣在世,不开源恐怕也会穷途末路
再说OpenWrt就是微型的Linux操作系统,熟悉了Linux,学习OpenWrt就很容易了
在以后的教程里,都是在Ubuntu下对OpenWrt进行管理。如果有两台电脑,建议一台装Ubuntu,如果只有一台电脑,可以装Ubuntu和Windows双启动
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
怎样从官网下载OpenWrt固件
从官网下载最新版的适合自己路由器的OpenWRT固件
-
进入OpenWrt固件下载主页面:
http://downloads.openwrt.org/
截止2018-09,最新稳定发行版:
OpenWrt 18.06.1 Released: Sat, 18 Aug 2018
Development Snapshots是开发版,包含最新的功能,但可能不够稳定
http://downloads.openwrt.org/snapshots/targets/
如果使用Snapshots没有什么问题,当然是最好的选择,否则可以尝试一下稳定发行版
下面以稳定版和WR2543举例
-
选择路由器的CPU类型
打开页面后,选择你的路由器的芯片型号进入,很多是ar71xx系列,于是进入了:
http://downloads.openwrt.org/snapshots/targets/ar71xx/
-
选择路由器的 Flash类型
再选择Flash类型,比如WR2543是generic,网件WNDR4300路由器是nand
http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/
再选择你的路由器型号,页面搜索 wr2543,找到了吗。有两个文字供下载,一个文件结尾是 factory.bin,适合原厂固件下刷,另一个文件名结尾是sysupgrade.bin,适合已经是OpenWrt系统下刷
OpenWrt官方wiki下载OpenWrt固件 for WR2543
OpenWrt官方网页上有WR2543N的专页,详细介绍了刷机步骤及注意事项.
打开官方Wiki页面 TP-Link TL-WR2543ND
上面列出了支持的版本: v1.0和v1.2。我的路由器是v1.0的,可以刷,你的版本如果不是这两个,不能确保能刷成功
这两个固件都带LuCI 网页管理界面。有时候,如果你升级了不带LuCI的固件,命令行方式又无法搞定OpenWRT上网参数设置,就需要先在电脑里下载带LuCI的固件,scp复制到路由器升级,再通过网页设置
有两个固件供下载:
- openwrt-ar71xx-generic-tl-wr2543n-v1-squashfs-factory.bin - Installing OpenWRT from factory
- openwrt-ar71xx-generic-tl-wr2543n-v1-squashfs-sysupgrade.bin - Upgrading an existing OpenWRT install
一定要注意:
- 在原厂固件上刷OpenWrt, 要用固件文件名带 factory 的.bin文件
- 已经刷了OpenWrt固件, 再升级 OpenWrt固件时就要用文件名带 sysupgrade 的 .bin文件
现在我们是在原厂固件基础上刷 OpenWrt, 自然是下载第一个文件,也就是 openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-factory.bin
要确保下载下来的文件完整,下载过程没有中断,如果下载下来的文件不完整,并把这个不完整的文件刷进机器,恢复起来很麻烦,有可能变砖
-
Netgear WNDR4300 预编译科学上网固件,支持xchacha20-ietf-poly1305(2018-10-22): https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
-
D-Link DIR-505 预编译科学上网固件 (2018-10-22): https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
-
TP-Link TLWR2543 预编译科学上网固件 (2018-10-22): https://software-download.name/2014/openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade-bin-with-shadowsocks/
进管理页面刷OpenWrt教程:WR2543路由器为例
通过有线或无线登录WR2543路由器管理页面
打开浏览器,输入路由器的IP地址: 192.168.1.1
回车,在密码验证框,输入用户名: admin 密码也是 admin
进路由器管理页面进行器固件升级
选择菜单系统工具→ 软件升级
点击 浏览 按钮选择下载的文件 openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-factory.bin
注意,文件名必须是...factory.bin
再单击 升级 进行软件升级。要注意,在刷固件过程中不可停电或其他原因造成中断,否则路由器就变砖了
等待几分钟
等锁形的指示灯不闪了,在浏览器输入地址: 192.168.1.1 回车,如果正常的话,就进入了 OpenWrt 的LuCI网页管理界面了
默认用户名是root,默认密码是空。点 Login 直接登录
相关资源:
管理页面OpenWrt PPPOE自动拨号上网设置教程
见面界面登录路由器后,就可以设置上网参数了
管理后台编辑OpenWrt WAN上网设置
选择上面的 Network,在 Interface里,WAN右边,选择Edit。WAN和ADSL moderm相连,设置拨号上网自然是在WAN而不是LAN.
管理页面配置OpenWrt PPPOE 自动拨号上网
进去后,在协议 Protocol 下拉列框里,选择拨号上网的协议,也就是 PPPoE, 再点击下面的 Switch Protocol切换协议
管理后台设置 OpenWrt PPPOE 自动拨号上网用户名、密码
- PAP/CHAP username: 拨号上网用户名
- PAP/CHAP password: 拨号上网密码
- 点击 Save & Apply 保存并应用设置
这时,连接LAN的电脑应该已经可以上网了,但无线设备还不行
相关资源:
管理页面OpenWrt开启、设置Wifi教程
登录OpenWrt路由器管理后台后:
选择 Network, Wifi, Edit
点击Enable按钮,这时无线设备已经可以连上Wifi
默认ESSID就是OpenWrt,没有密码。不想做活雷锋的加个密码吧
OpenWrt Wifi密码设置
把ESSID改成 eastking-wr2543,然后:
- 点击Wireless Security进入OpenWrt无线安全设置
- Encryption加密方式,WPA2-PSK
- Key密码:killgfw
- Save & Apply 保存并应用设置
这时,所有无线设备都可以通过OpenWrt路由器上网了
OpenWrt管理界面登录密码设置
你注意到没有,网页上方有一个红色的框框(No password set!)一直在提示我们: 小人不得不防,OpenWrt叫你设一个路由器管理界面登录密码呢!
-
点击最上面的System进入系统设置
-
再点击Administration进入管理员设置
-
密码Password: fanqiang
-
确认密码Confirmation: fanqiang
-
其他设置:下面的:
Gateway ports,勾选 Allow remote hosts to connect to local SSH forwarded ports(允许远程主机连接本地SSH转发端口),这样我们就可以用SSH命令行的方式管理路由器。最后点击右下角 Save & Apply保存并应用设置
相关资源:
管理页面备份OpenWrt系统固件
现在有线和无线上网都正常了。应该把现有的OpenWrt设置备份一下,因为我们还要经常折腾OpenWrt,有时一个设置错误,可能就上不了网,有了备份,就可以快速恢复
选择System系统设置
选择Backup / Flash Firmware备份恢复固件
Actions动作
Generate生成备份文件并保存到电脑
如果以后你要恢复备份,就点击Browse...浏览并选择先前备份的文件来恢复
相关资源:
管理页面LuCI升级OpenWrt固件内核版本
我们现在已经给TP-Link WR2543N刷上了OpenWrt固件,并且可以正常上网了。如果要升级OpenWrt固件,又该怎么做呢?
有两个途径升级固件:
- LuCI web界面升级
- SSH命令行登录路由器升级
本节就讲 web管理界面LuCI升级固件的方法
下载OpenWrt升级用固件sysupgrade.bin
下载用于WR2543N路由器的升级固件,升级用固件文件名中有sysupgrade字样
还是到OpenWrt Wiki页面 TP-Link TL-WR2543ND
点击下载链接,比如 http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/generic/openwrt-18.06.1-ar71xx-generic-tl-wr2543-v1-squashfs-factory.bin 其实这个固件的核心和我们先前安装的...factory.bin一样,我们是出于实验目的,演示升级固件的方法,
用前文讲过的方法从网页登录OpenWrt路由器
LuCI 开始升级OpenWrt固件内核版本
-
System系统
-
Backup / Flash Firmware备份或刷新固件
-
Flash new firmware, Browse...选择我们刚下载下来的固件
-
Flash image...刷新固件
注:如果Keep settings保持勾选,升级固件后,原来的设置就会保留,不用重新设置拨号上网参数
相关资源:
怎样进入OpenWrt 安全恢复模式(WR2543N为例)
有时候,我们可能操作失误,无法进入LuCI网页界面管理恢复固件,这时就需要进入安全模式来恢复了
不同的路由器,进入安全模式的方法可能有所差别,本文系列适用于 TP-LINK WR2543N
安全模式是玩OpenWrt的救命仙丹。能熟练进入安全模式来恢复设置,是OpenWrt已经上手的一个标志
进入安全模式时,没有无线连接可用,所以我们要有线的方式登录OpenWrt。OpenWrt默认的IP地址是192.168.1.1,我们要设置电脑有线连接的IP地址类似于192.168.1.x, 其中x是2至255的数字
WR2543N无线路由器进入OpenWrt安全模式的方法:
-
用网线把路由器和电脑连接起来,设置电脑网卡的IPv4地址
以Ubuntu为例,点击桌面右上角连接符号,选择 Edit Connections, 再选择 Ethernet连接,点击 Edit 按钮,在弹出的窗口中选择 IPv4 Settings, Method选择Manual,Address栏点击Add,设置如下:
- Address: 192.168.1.97
- Netmask: 255.255.255.0
- Gateway: 192.168.1.1
-
在Ubuntu运行命令:
sudo tcpdump -Ani eth0 port 4919 and udp
-
重启路由器,当WR2543N的锁形指示灯刚一开始闪烁时,立即按路由器背面的wps按钮3次
-
Ubuntu命令行界面出现:
Please press button now to enter failsafe
-
Ubuntu命令行执行(有时可以不需tcpdump直接telnet):
telnet 192.168.1.1
这时就成功登录了OpenWrt,如下图:
-
设置登录OpenWrt SSH登录密码:
passwd #输入密码 fanqiang
如果出现:
passwd: /etc/passwd: Read-only file system passwd: can't update passwd file /etc/passwd
就输入
mount_root
再重新passwd设置管理员密码如下图:
telnet登录路由器后,可以用vi命令修改设置
这时如果你试图用浏览器登录192.168.1.1进入管理界面的话,可能失败
重启路由器,路由器锁形指示灯先是慢闪,到变成常亮时,你又可以登录 192.168.1.1管理界面。一切恢复正常
相关资源:
OpenWrt sysupgrade 命令行升级固件内核版本
下面我们要使用 sysupgrade 更新固件到新版
要注意的是,如果刷的是开发版,可能不稳定,刷机风险自己承担
在浏览器里登录 192.168.1.1 进行固件升级是比较简单的。今天我们要尝试的的是命令行刷机升级。命令行的方式更强大
SSH登录路由器
在Ubuntu里,按Ctrl+Alt+T打开命令行终端,输入:
ssh root@192.168.1.1
输入密码,登录成功
进入OpenWrt /tmp目录
cd /tmp
检查OpenWrt路由器是否有足够的内存
df -h
可以看出, /tmp 还有29.5MB可用空间,而升级固件在3MB左右,足够了
下载OpenWrt最新trunk版本固件
-
在Ubuntu里浏览器打开 http://downloads.openwrt.org/snapshots/targets/
-
TP-LINK WR2543N路由器的芯片类型是ar71xx,就点击 ar71xx 目录进入。要注意,路由器的芯片类型千万不能搞错,不同路由器很可能是不同的
-
TP-LINK WR2543路由器的Flash类型为 generic,于是进入了 http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/
-
按Ctrl+F查找自己的路由器型号。比如我输入的是 wr2543, 有两个固件,升级用的是 sysupgrade.bin文件。右键点击该链接,复制下载地址。在FireFox里是 Copy Link Location复制链接地址
-
回到Ubuntu命令行终端, 下载固件到 /tmp 目录。TP-LINK wr2543路由器是这样的:
root@OpenWrt:/tmp# wget http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin
sha256校验,确保下载的固件完整
root@OpenWrt:/tmp# wget http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/sha256sums
root@OpenWrt:/tmp# sha256sum -c sha256sums 2> /dev/null | grep OK
openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin: OK
输出结尾是OK,说明固件是完整的
OpenWrt sysupgrade命令升级OpenWrt固件
root@OpenWrt:/tmp# sysupgrade -v openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin
...
Upgrade completed
Rebooting system...
过约2分钟,等路由器重启成功,如果没有意外,会发现有线和无线上网都正常。但浏览器192.168.1.1无法登录,因为snapshots版本固件是不带LuCI网页管理界面的。没有也好,可以节省路由器的存储空间,也可以学习一下命令行管理OpenWrt路由器
相关资源:
- https://openwrt.org/docs/guide-user/installation/generic.sysupgrade
- https://xwvut.software-download.name/
命令行 uci设置 OpenWrt router 模式拨号上网
如果路由器可以正常上网的前提,我们可以ssh登录路由器,直接在路由器的/tmp目录wget下载最新版固件并sysupgrade命令进行固件升级
有时候,路由器无法上网,这时候,可以在电脑里下载好固件,再把固件复制到路由器,再sysupgrade升级或设置其他参数
只要能进入路由器的安全模式,并ssh登录路由器,一切都不是问题
Ubuntu下载OpenWrt for TP-LINK wr2543N trunk版固件
cd ~/Downloads
wget http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin
scp复制固件到OpenWrt路由器 /tmp目录
scp openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/
ssh登录OpenWrt路由器
ssh root@192.168.1.1
cd /tmp
sysupgrade升级固件并取消保留原来配置文件
注意,升级后将无法上网,也没有LuCI网页界面可以设置,必须以命令行方式设置好上网参数
如果在下面的实验中,命令行方式无法搞定路由器上网,就只能在电脑里下载好带luCI的固件,scp复制固件到路由器升级固件,然后以网页方式设置上网
在进行这一步前,确保你熟练掌握以前部分教程
root@OpenWrt:/tmp# sysupgrade -n openwrt-ar71xx-generic-tl-wr2543-v1-squashfs-sysupgrade.bin
参数 -n
表示升级时不保留原来的配置文件。固件刷好后会自动重启,这时要用前文教程讲过的方法进入OpenWrt安全模式,登录路由器并重新设置root密码
下面假设你已经登录了路由器并设好了root密码
OpenWrt uci命令行设置拨号上网:
root@OpenWrt: uci set network.wan.proto='pppoe'
root@OpenWrt: uci set network.wan.username='wan-username'
root@OpenWrt: uci set network.wan.password='wan-password'
root@OpenWrt: uci set network.wan.peerdns=0
wan-username替换成你自己的拨号上网用户名,wan-password替换成你自己的密码
以上命令行的操作对象是文件 /etc/config/network
OpenWrt uci命令行设置无线上网:
root@OpenWrt: uci set wireless.@wifi-device[0].channel=11
root@OpenWrt: uci set wireless.@wifi-device[0].txpower=17
root@OpenWrt: uci set wireless.@wifi-device[0].disabled=0
root@OpenWrt: uci set wireless.@wifi-device[0].country='CN'
root@OpenWrt: uci set wireless.@wifi-iface[0].mode='ap'
root@OpenWrt: uci set wireless.@wifi-iface[0].ssid='eastking-tlwr2543'
root@OpenWrt: uci set wireless.@wifi-iface[0].encryption='psk2'
root@OpenWrt: uci set wireless.@wifi-iface[0].key='icanfly9876'
root@OpenWrt: uci commit wireless >/dev/null
以上命令实际上是应用在 /etc/config/wireless 文件上
uci设置说明:
- channel 信道
- txpower 功率
- disabled 是否启用无线,0表示启用
- ssid 名称,推荐后面以路由器型号结尾,这样调试多个路由器时不会混淆
- encryption 加密方式
- key 无线密码,如果你照上文的设置不动,好处是忘记密码时可以上 http://www.github.com/softwaredownload/openwrt-fanqiang 来查看
允许远程主机用ssh的方式登录路由器及设置时区
root@OpenWrt: uci set dropbear.@dropbear[0].GatewayPorts='on'
root@OpenWrt: uci set system.@system[0].zonename='Asia/Shanghai'
root@OpenWrt: uci set system.@system[0].timezone='CST-8'
root@OpenWrt: uci commit system
ssh登录OpenWrt相关高级设置(你可能暂时用不到)
root@OpenWrt: uci set dropbear.@dropbear[0].Port=22
root@OpenWrt: uci set dropbear.@dropbear[0].PasswordAuth=off
root@OpenWrt: uci set dropbear.@dropbear[0].RootPasswordAuth=off
root@OpenWrt: uci commit dropbear
说明(不懂千万别乱设):
- Port ssh默认端口就是22,可以改成其他的提高安全性
- PasswordAuth ssh是否启用密钥登录。如果你改成off,又没有设置好ssh私钥和安装好LuCI,你将无法ssh方式登录路由器,唯一的办法就是安全恢复模式登录重新开始设置
- RootPasswordAuth 是否允许root用密码登录,如果已经设置好了ssh私钥就可以改成off增加安全性
启用新的网络和无线设置
root@OpenWrt: /etc/init.d/dropbear restart
root@OpenWrt: /etc/init.d/system restart
root@OpenWrt: /etc/init.d/network restart
怎么样,有线和无线上网又都回来了吧!
注意,有的人在网上贴出了他的完整配置文件/etc/config/network 和/etc/config/wireless, 如果你复制他的文件覆盖你的文件,再修改用户名和密码,可能会出问题,因为不同路由器的硬件配置可能不同
相关资源:
命令行 uci设置OpenWrt ap模式上网参数
前面章节已经说过了router模式上网的设置方法,主要是设置OpenWrt路由器wan口的拨号上网参数
OpenWrt路由器工作在ap模式下时,自身不需要拨号上网了,设置稍有不同
什么时候需要用到OpenWrt ap模式上网
光纤包月或包年上网时,通信公司一般会给一个猫,如果猫里没有设置自动拨号上网,那么OpenWrt路由器就要用router模式,我们自己手动在OpenWrt里设置拨号上网
如果猫里已经设置好拨号上网,从猫的lan拉出一根网线插到电脑的网线接口,电脑直接可以上网了,再把这根网线插到路由器上,这时OpenWrt路由器就要设置成ap模式
如果是公司里或者家里有多个路由器,上级路由器里拉出一根网线插到电脑网线接口,电脑直接可以上网了,再把这根网线插到路由器上,这时OpenWrt路由器作为下级路由器,需要设置成ap模式
OpenWrt路由器AP模式网络设置
-
从光猫或上级路由器拉出网线,插到OpenWrt路由器的lan口(注意不是插到wan口)
-
命令行登录OpenWrt路由器,设置参数
假设光猫或上级路由器的IP地址是192.168.1.1,我们设置OpenWrt路由器的lan地址是 192.168.1.254,这也是登录OpenWrt路由器的的地址
uci set network.lan.gateway=192.168.1.1 uci set network.lan.dns=192.168.1.1 uci set network.lan.ipaddr=192.168.1.254 uci set network.wan.proto=none uci commit network uci set dhcp.lan.ignore=1 uci commit dhcp uci set wireless.@wifi-device[0].disabled=0 uci set wireless.@wifi-iface[0].mode='ap' uci set wireless.@wifi-iface[0].ssid='eastking' uci set wireless.@wifi-iface[0].encryption='psk2' uci set wireless.@wifi-iface[0].key='icanfly9876' uci commit wireless wifi /etc/init.d/network restart
客户端连接OpenWrt路由器:
如果不需要科学上网,客户端连上OpenWrt路由器后,直接就可以上网了
如果上级路由器没有科学上网,客户端需要通过OpenWrt路由器科学上网,客户端连接到OpenWrt路由器后,按照下面设置:
- 设置客户端连接的的IPv4地址是 192.168.1.6(最后的6不和其他设备的地址相同即可)
- 设置子网掩码为255.255.255.0
- Router(网关)和DNS设为路由器lan口的地址,此处为192.168.1.254
原理:以OpenWrt路由器作为DNS服务器,我们已经把OpenWrt设置成科学上网路由器,连上的客户端自然就可以打败功夫网了
iPhone连接ap模式的科学上网路由器,IPV4设置如上图
iPhone连接ap模式的科学上网路由器,DNS设置如上图
相关资源:
OpenWrt 国内镜像源下载固件
从国内下载 OpenWrt 官方仓库的软件会比较慢,解决办法是使用国内镜像
我们来调整一下 OpenWrt 存储库的设置
OpenWrt Feed 在 /etc/opkg/distfeeds.conf
中设置
kige@openwrt:~# cd /etc/opkg
kige@openwrt:/etc/opkg# ls
customfeeds.conf distfeeds.conf keys
kige@openwrt:/etc/opkg# cat dist*
src/gz openwrt_core http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/nand/packages
src/gz openwrt_base http://downloads.openwrt.org/releases/18.06.1/packages/mips_24kc/base
src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06.1/packages/mips_24kc/luci
src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06.1/packages/mips_24kc/packages
src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06.1/packages/mips_24kc/routing
src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06.1/packages/mips_24kc/telephony
我们更换成中科大的镜像,地址是:http://openwrt.proxy.ustclug.org
kige@openwrt:/etc/opkg# cp dist* distfeeds.conf.bak
kige@openwrt:/etc/opkg# sed -i s/downloads.openwrt.org/openwrt.proxy.ustclug.org/ /etc/opkg/distfeeds.conf
接下来还要做二件事:
-
把中科大镜像站域名加入 /etc/dnsmasq.d/custom.china.conf
直接修改 accelerated-domains.china.conf 不是好主意,更新文件时我们的修改会被覆盖。
custom.china.conf
包含了自定义的在国内DNS的域名 -
把中科大 OpenWrt 镜像的IP地址
202.141.178.13
加入 /etc/shadowsocks-libe/ip_custom.txtip_custom.txt
是自定义的路由器防火墙忽略的地址,这样即使全局科学上网,中科大OpenWrt镜像还是直连
如果你已经把本项目 clone 到了 Windows 下 C 盘根目录,并且按照 OpenWrt + Git Bash for Windows 快速切换科学上网模式 设置好了一键切换科学上网模式,那么你不用自己修改以上设置,只要如下操作就行了:
调出 Git Bash for Windows,执行命令:
MinGW64 ~$ cd /C/openwrt-fanqiang/openwrt/default
$ scp etc/dnsmasq.d/custom.china.conf router:/etc/dnsmasq.d/
$ scp etc/shadowsocks-libev/ip_custom.txt router:/etc/shadowsocks-libev/
$ ss-restart
$ feeds-cn
你可能猜到了 ss-restart 是自动登录路由器并重启 shadowsocks, 而 feeds-cn 则自动登录路由器并修改OpenWrt软件仓库 feeds 为国内镜像
这种直接在 OpenWrt 里执行命令的方法可比登录界面再去修改设置高效100倍。快点把你心爱的脚本分享出来,并提交到 https://github.com/softwaredownload/openwrt-fanqiang 这样任何人都可以一键使用你的脚本而不用去研究技术细节了
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/bin
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/dnsmasq.d
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/shadowsocks-libev
- https://openwrt.org/docs/guide-user/additional-software/opkg
- https://xwvut.software-download.name/
网件Netgear WNDR4300刷OpenWrt科学上网教程
网件Netgear WNDR4300是很多网友推荐的可刷OpenWRT的无线路由器
WNDR4300有v1和v2的区别,目前国行都是v1版本
网件Netgear WNDR4300无线路由器的优点
- 刷OpenWrt方便。购买后,登录管理界面可以直接刷OpenWrt
- WNDR4300自带不死uboot,刷机比较安全
- 硬件配置高。据网友测试,同时接入40台机器都没有问题
- 无线信号强。150平方的室内基本无信号死角
- 有一个 USB 接口,可以挂载设备
网件Netgear WNDR4300国行硬件信息
千兆双频,300+450Mbps的无线连接,2.4G和5G无线信号可以同时使用,1000Mbps有线端口,内置5天线(两根5G+三根2.4G),采用Atheros AR9344处理器,频率550MHz,128M DDR2内存,128M ROM,USB可接硬盘进行共享,带有wifi开关按钮可以单独关闭无线信号
Version v1
CPU Atheros AR9344 rev2 560MHz MIPS 74Kc V4.12
Ram 128MiB
Flash 128MiB NAND
Network 1 WAN + 4x LAN (GBit)
Wireless AR9580 [an 3x3:3] + AR9344 [bgn 2x2:2]
USB Yes
如何购买网件Netgear WNDR4300无线路由器
目前自营电商的价格一般是299元,TB价大约280元
参考信息
https://openwrt.org/toh/netgear/wndr4300
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
下载和设置OpenWrt Image Builder for 网件Netgear WNDR4300路 由器
编译详细过程见 使用Image Builder编译自动科学上网OpenWrt固件
网件Netgear WNDR4300路由器完全使用128M内存教程
将ubi和firmware增加96M,完全使用128M flash,以实现 WNDR4300路由器 overlay分区大于90MB的功能
在linux下用vi命令可以很方便地查找和修改特定字符
- 查找23552k,替换成121856k
- 查找25600k,替换成123904k
下面就用vi来修改:
cd ~/Downloads/openwrt-imagebuilder/target/linux/ar71xx/image
cp legacy.mk legacy.mk.bak
vi legacy.mk
#change ubi size to 121856k
# search
/23552k
# delete word
dw
# insert
i
121856k
#change firmware size to 123904k
/25600k
dw
i
123904k
#Save and exit
ZZ
更加简单的方法是用 sed 替换:
sed -i s/'23552k(ubi),25600k@0x6c0000(firmware)'/'121856k(ubi),123904k@0x6c0000(firmware)'/ ./legacy.mk
修改好后是这样的:
根据此文,修改Flash布局后,再刷原厂固件,路由器可能变砖,请慎重:
对比可以看出来Openwrt做到了和原版一致的Flash分区,因此正常情况下通过TFTP方式刷官方固件因为分区一致是不会有什么问题的。但是如果之前刷入过增加可用空间的改版Openwrt固件的话,原始的Flash分区就会被破坏
预编译固件都是修改了此二值的
相关资源:
- https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/ebook/04.3.md
- https://kiritox.me/archives/flash-wndr3700v4-to-stock-firmware.html
编译shadowsocks-libev ipk for网件Netgear WNDR4300路由器
不同OpenWrt版本下编译的shadowsocks-libev ipk一般是不能通用的。比如现在用的是trunk版的OpenWrt,如果使用OpenWrt Chaos Calmer 15.05 下编译的shadowsocks-libev,可能安装后根本不能启动
前面我曾编译出科学上网固件,其中shadowsocks-libev是别人编译,从sourceforge上下载的,刷上固件后,shadowsocks总是没有自动启动,运行/usr/bin/ss-redir,报告没有找到这个文件,其实文件是在的,只是不兼容。所以,最好还是自行编译shadowsocks-libev
按官网的说法,以下 不要使用root用户来操作
使用SDK编译ipk的新方法教程请参考:编译shadowsocks-libev for OpenWrt ipk安装包(2018年9月更新)
如果你想节省时间,建议下载预编译的shadowsocks-libev for OpenWrt ipk安装包:
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
编译shadowsocks-libev ipk安装包(最后更新于2016年)
下面都是在Linux下操作
cd ~/Downloads
git clone git://git.openwrt.org/openwrt.git
pushd package
git clone https://github.com/shadowsocks/shadowsocks-libev.git
popd
cd ~/Downloads/openwrt
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make prereq
make menuconfig
# Target System: Atheros AR7xxx/AR9XXX
# Subtarget: Generic device with NAND flash
# Target Profile: (因我们只是编译包,这步可以不选)
# Network, 选择shadowsocks-libev-openssl 和 shadowsocks-libev-polarssl, 按m设置为编译独立ipk安装包
# Save && Exit
# 这一步花了几个小时
make tools/install && make toolchain/install
# 开始编译
make V=99 package/shadowsocks-libev/openwrt/compile
输出文件在 openwrt/bin/ar71xx/packages/base/目录下,主要有:
shadowsocks-libev_2.4.3_ar71xx.ipk
shadowsocks-libev-polarssl_2.4.3_ar71xx.ipk
libopenssl_1.0.2e-1_ar71xx.ipk
libpolarssl_1.3.15-1_ar71xx.ipk
把所有ipk都复制到ImageBuilder的packages目录下
cd ~/Downloads/openwrt/bin/ar71xx/packages/base/
cp * ~/Downloads/openwrt-imagebuilder/packages
相关资源:
- https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
- https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
设置网件Netgear WNDR4300科学上网配置文件
要科学上网成功,这一步是最重要的
分三步,下载本项目openwrt-fanqiang;复制配置文件;修改配置文件
下面以linux系统 ~/Downloads 下操作为例
下载包含默认科学上网配置文件的openwrt-fanqiang项目
-
git下载openwrt-fanqiang项目
cd ~/Downloads git clone https://github.com/softwaredownload/openwrt-fanqiang
-
或者下载zip文件
https://github.com/softwaredownload/openwrt-fanqiang/archive/master.zip
本地项目文件夹是: ~/Downloads/openwrt-fanqiang
复制openwrt-fanqiang里面的科学上网配置文件到openwrt-wndr4300目录下
建立一个配置文件夹,以路由器型号结束,如 ~/Downloads/openwrt-wndr4300
cd ~/Downloads
mkdir openwrt-wndr4300
cd openwrt-fanqiang
cp -R openwrt/default/* ~/Downloads/openwrt-wndr4300/
cp -R openwrt/wndr4300/* ~/Downloads/openwrt-wndr4300/
上面的操作,先复制共用的配置文件 openwrt/default/* 到 openwrt-wndr4300目录下
然后复制wndr4300专用的配置文件到 openwrt/wndr4300/* 到 openwrt-wndr4300目录下,如果有同名文件就覆盖
如果你要贡献本项目,也是先在openwrt-fanqiang/openwrt目录下先建立路由器型号为名称的文件夹,再把专用的配置文件放到此文夹下。注意文件夹和文件名都是小写的
修改Netgear WNDR4300科学上网配置文件
主要修改以下文件:
openwrt-wndr4300/etc/shadowsocks-libev/config.json
openwrt-wndr4300/usr/bin/ss-firewall-asia
openwrt-wndr4300/etc/uci-defaults/defaults
为了方便以后升级,可以写个bash文件自动修改配置文件
一切操作尽量自动化,你甚至可以自动化一切操作:下载ImageBuilder,下载OpenWrt源码,下载shadowsocks-libev源码,同步openwrt-fanqiang源码,编译ipk,修改科学上网设置,编译科学上网固件,早上一觉醒来,新鲜出炉、美味可口的科学上网固件就已经摆放在桌上了
下面是一个自动修改配置文件的例子,从中可以知道需要修改哪些地方。从2015年12月起,可能用于自动化修改的默认值都应该标准化,方便自动化操作
config-wndr4300.sh:
#!/bin/bash
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2015-12-20
REPOSITORY=~/Downloads/openwrt-fanqiang
CONFIG=~/Downloads/openwrt-wndr4300
createdir() {
rm -rf $CONFIG
mkdir $CONFIG
}
copy() {
cp -R $REPOSITORY/openwrt/default/* $CONFIG/
cp -R $REPOSITORY/openwrt/wndr4300/* $CONFIG/
}
setmod() {
chmod +x $CONFIG/usr/bin/ss-firewall-asia
chmod +x $CONFIG/etc/uci-defaults
chmod +x $CONFIG/etc/uci-defaults/*
}
modify() {
# server ip address
sed -i 's/1.0.9.8/server_ip/' $CONFIG/etc/shadowsocks-libev/config.json
# server_port
sed -i 's/1098/server_port/' $CONFIG/etc/shadowsocks-libev/config.json
# local_port
sed -i 's/7654/7654/' $CONFIG/etc/shadowsocks-libev/config.json
# password
sed -i 's/killgfw/killgfw/' $CONFIG/etc/shadowsocks-libev/config.json
# method
sed -i 's/chacha20-ietf-poly1305/chacha20-ietf-poly1305/' $CONFIG/etc/shadowsocks-libev/config.json
# server ip addresss
sed -i 's/1.0.9.8/server_ip/' $CONFIG/usr/bin/ss-firewall-asia
# local_port
sed -i 's/7654/7654/' $CONFIG/usr/bin/ss-firewall-asia
# ppoe username
sed -i 's/wan-username/wan-username/' $CONFIG/etc/uci-defaults/defaults
# ppoe password
sed -i 's/wan-password/wan-password/' $CONFIG/etc/uci-defaults/defaults
# wifi password
sed -i 's/icanfly9876/icanfly9876/g' $CONFIG/etc/uci-defaults/defaults
# router login password for root
sed -i 's/\\nfanqiang/\\nfanqiang/' $CONFIG/etc/uci-defaults/defaults
}
if [ "$1" = "createdir" ]; then
createdir
elif [ "$1" = "copy" ]; then
copy
elif [ "$1" = "setmod" ]; then
setmod
elif [ "$1" = "modify" ]; then
modify
else
echo "usage: createdir copy setmod modify"
fi
config-wndr4300.sh使用方法:
必改值是:
server_ip
wan-username
wan-password
如果你比较懒,就改这三项就行了,可以说本教程是最简单的科学上网方案了
选改值:
router login password for root
wifi password
其他值一般保持默认值就可以了
假设config-wndr4300.sh在~/Downloads目录下,运行命令自动修改科学上网配置:
cd ~/Downloads
sudo chmod +x config-wndr4300.sh
./config-wndr4300.sh createdir
./config-wndr4300.sh copy
./config-wndr4300.sh setmod
./config-wndr4300.sh modify
相关资源:
编译OpenWrt自动科学上网固件 for 网件Netgear WNDR4300路由器
经过前面几个步骤,一切准备就绪,下面就正确开始编译Netgear WNDR4300专用全自动科学上网固件了
编译OpenWrt自动科学上网固件前的系统准备
sudo apt-get update
sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip
OpenWrt Image Builder的三个命令行参数
- PROFILE 指定设备类型,此处是 WNDR4300V1
- PACKAGES 指定要编译进固件的包
- FILES 指定要编译进固件的自定义文件,如网络有关配置文件, 默认目录:~/Downloads/openwrt-wndr4300
开始编译OpenWrt自动科学上网固件 for 网件Netgear WNDR4300路由器
命令:
cd ~/Downloads/openwrt-imagebuilder
make image PROFILE=WNDR4300V1 PACKAGES="libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport luci-ssl ipset ipset-dns wget iptables-mod-nat-extra bind-dig dnsmasq-full libmbedtls libcares libev libsodium shadowsocks-libev -dnsmasq" FILES=~/Downloads/config-wndr4300
编译时报错:
opkg_install_cmd: Cannot install package kmod-ipv6
移除 kmod-ipv6后编译成功
编译好的的固件在:
~/Downloads/openwrt-imagebuilder/bin/targets/
其中包含:
openwrt-ar71xx-nand-wndr4300-ubi-factory.img
openwrt-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar
可见生成了二种格式的固件,img 格式和 tar 格式。 其中 img 格式只能用 tftp 的方法进行刷入。而 tar 也只能通过 已刷了Openwrt的WEB端进行刷入
请同时参考使用Image Builder编译自动科学上网OpenWrt固件
部分编译错误处理:
-
Build dependency: Please install the openssl library (with development headers)
For Centos:
yum install openssl-devel
For Ubuntu:
sudo apt-get install libssl-dev
-
Unable to open feeds configuration in line 42
使用
svn co svn://svn.openwrt.org/openwrt/trunk/
下载后再编译的方法没有遇到这个问题 -
configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See config.log' for more details
将下载的文件的所有者改为自己,假设用户名是ubuntu
sudo chown -Rv ubuntu /home/ubuntu/openwrt
再重新运行
make
相关资源:
网件Netgear WNDR4300路由器怎样刷OpenWrt自动科学上网固件
两种科学上网固件格式 img tar的区别
openwrt-ar71xx-nand-wndr4300-ubi-factory.img
openwrt-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar
我们编译出了两种固件,一种为 ...ubi-factory.img 格式,一种为 ...squashfs-sysupgrade.tar 格式。 其中 img 格式只能用 tftp 的方法刷入。而 tar 只能通过已刷了Openwrt的WEB端进行刷入。下面分别说明 两种不同的刷入方法:
tftp刷固件的方式,不管原来的固件是什么格式,都可以刷factory.img
网件Netgear WNDR4300路由器进入恢复模式的方法
- 关闭路由器电源
- 用 牙签,或其他尖物 按住设备背面的机身背面的红色小圆孔(Restore Factory Settings button)
- 开启电源开关
- 观察电源灯(此时保持按住Restore Factory Settings按钮不要松手),直到电源灯由 橙色闪烁 状态变到 绿色闪烁 状态(说明设备已经进入到了 TFTP修复模式 )
Linux下Netgear WNDR4300路由器用tftp刷科学上网固件
-
将电脑用网线连接到设备的 LAN口,而不是wan口。国行Netgear WNDR4300的wan口是黄色的
-
将电脑的本地连接IP设置为 192.168.1.X (此例中IP地址设置为 192.168.1.9),子网掩码为 255.255.255.0,网关为192.168.1.1
-
路由器进入恢复模式
-
测试能否连接到路由器:
ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. Warning: time of day goes back (-3646479862160196504us), taking countermeasures. Warning: time of day goes back (-3646479862160196420us), taking countermeasures.
-
网件Netgear WNDR4300路由器刷科学上网固件
sudo apt-get install tftp # 进入固件所在目录 cd ~/Downloads/openwrt-imagebuilder/bin/targets/ar71xx/nand echo -e "binary\nrexmt 1\ntimeout 60\ntrace\nput openwrt-18.06.1-ar71xx-nand-wndr4300-ubi-factory.img\n" | tftp 192.168.1.1
-
观察指示灯,文件会在5秒内传送完毕,等待80秒左右,设备会自动重启(请耐心等待,切勿将路由器手动断电)。设备重启后,看到亮绿灯,一定要按机身后面的电源开关手动断电、开机,否则可能没有无线5G 这不是BUG,其他openwrt也是一样的。每次刷factory.img都要这样
路由器完成初始化需要几分钟时间, 2.4G 和 5G 的无线信号灯才会亮起,请耐心等待
Windows下Netgear WNDR4300路由器用tftp刷科学上网固件
-
启用tftp。Windows 10下:控制面板,所有控制面板项,程序和功能,启用或关闭Windows功能,启用“TFTP”客户端
Windows 10(英文版为例), 按 Windows 键,输入 features on 然后回车:
然后勾选 TFTP Client:
-
将电脑用网线连接到设备的 LAN口
-
将电脑的本地连接IP设置为 192.168.1.X (此例中IP地址设置为 192.168.1.9),子网掩码为 255.255.255.0,网关192.168.1.1
-
路由器进入恢复模式
-
测试能否连接到路由器: ping 192.168.1.1
-
网件Netgear WNDR4300路由器刷科学上网固件
- 按Windows+R,输入cmd并回车调出命令行程序
- 假设 openwrt-ar71xx-nand-wndr3700v4-ubi-factory.img 在C:\盘
-
运行命令:
cd C:\ tftp -i 192.168.1.1 put openwrt-ar71xx-nand-wndr3700v4-ubi-factory.img
-
-
观察指示灯,设备重启后,看到亮绿灯,再手动断电、开机,否则可能没有无线5G
相关资源:
- https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
- https://openwrt.org/docs/guide-user/installation/generic.flashing.tftp
- Windows下Netgear WNDR4300刷OpenWrt固件PDF教程 by 书浅
登录并设置已经刷了OpenWrt 科学上网固件的网件Netgear WNDR4300路由器
Netgear WNDR4300 (2018版)预编译科学上网固件下载
https://software-download.name/2015/netgear-wndr4300-openwrt-fanqiang-gujian/
你按照本教程编译了WNDR4300路由器 OpenWrt 全自动科学上网固件,并且刷进了路由器,如果一切正常,就可以零设置自动科学上网了。运气不够好,就要登录路由器修改一下设置
你懶得自己编译科学上网固件,下载了本教程提供的Netgear WNDR4300路由器科学上网固件并刷进了路由器,就必须手动修改一些值才能自动科学上网
本教程就针对上面这两种情况
怎样登录已经刷了OpenWrt 科学上网固件的网件Netgear WNDR4300路由器
用网线连接电脑和路由器,将电脑的本地连接IP设置为 192.168.1.97,子网掩码为 255.255.255.0,网关为:192.168.1.1
- 网页登录地址: http://192.168.1.1
- ssh登录: ssh root @192.168.1.1
- 默认登录密码: fanqiang
网页登录 WNDR4300 管理界面并修改设置
在浏览器地址栏输入 192.168.1.1 并回车
-
修改路由器密码和 SSH 登录设置
鼠标移到顶部菜单栏 System (系统), 再点击 Administration (管理员设置)
2018 版预编译科学上网固件,需要把公钥粘贴在 SSH-Keys 的空白格子里,否则可能无法 ssh 登录路由器
修改好设置后,点击 Save & Apply (保存并应用)
-
设置拨号上网用户名和密码
- 鼠标移到顶部菜单栏 Network (网络), 再点击 Interfaces (接口)
- 点击左上角的 WAN 标签
- 修改拨号上网 PPPoE 用户名和密码
- 点击 Save & Apply 保存设置并应用
Linux下ssh登录WNDR4300路由器并修改设置
-
对于2018版预编译科学上网固件,参考上面的教程 先在网页管理界面添加 SSH 登录的公钥,否则可能无法 ssh 登录路由器
-
创建 ssh 自动登录的 host
在 Linux 下是修改 ~/.ssh/config 文件。Windows 下可以安装 MSYS2 或 Git for Windows 并修改相应的文件
~/.ssh/config
Host router HostName 192.168.1.1 User root Port 22 IdentityFile ~/path/to/rsa/file
其中 IdentityFile 后面写 SSH 私钥文件的路径
然后就可以在命令行里免密码自动登录路由器:
$ ssh router
-
命令行登录路由器后,修改 shodowsocks-libev 配置文件
主要修改 server 和 server_port(注意,如果有拼写错误,请修正,否则 SS 将无法启动)
root@OpenWrt:~# vi /etc/shadowsocks-libev/config.json
-
添加服务器 IP 地址到 ip_server.txt, 一行一个IP地址
root@OpenWrt:~# vi /etc/shadowsocks-libev/ip_server.txt
-
添加自定义的白名单 IP 地址到 ip_custom.txt, 一行一个IP地址。可以跳过这步
root@OpenWrt:~# vi /etc/shadowsocks-libev/ip_custom.txt
-
命令行修改拨号上网用户名和密码
# wan-username, wan-password root@OpenWrt:~# vi /etc/config/network
-
命令行修改 WIFI 密码
# wifi password, optional root@OpenWrt:~# vi /etc/config/wireless
如果你修改了本教程默认的shadowsocks local_port和tunnel_port,还得修改/etc/dnsmasq.d/下相关文件中的端口号
执行以下命令使修改生效
root@OpenWrt:~# /etc/init.d/shadowsocks stop
root@OpenWrt:~# /etc/init.d/shadowsocks start
root@OpenWrt:~# /etc/init.d/dnsmasq restart
root@OpenWrt:~# /etc/init.d/network restart
相关资源:
D-Link DIR-505路由器刷OpenWrt固件科学上网教程
前面的教程用结合 TP-LINK TL-WR2543N 来讲解科学上网原理与方法,并不是我特别推荐TP-LINK TL-WR2543N,而是因为手头正好有这个路由器。毫无疑问,初学者使用教程同款路由器比较容易上手。但此型号趋向退市,价格也不便宜,网上有二手货,如果功能正常倒也可以考虑
另外的选择,是使用 D-Link DIR-505 便携式路由器。配置高,价格便宜
D-Link DIR 505 硬件信息
Architecture: MIPS 24Kc
Vendor: Atheros
Bootloader: UBoot 1.1.4
System-On-Chip: SoC: Atheros AR9330 rev 1
CPU/Speed: Atheros AR9330 400.000MHz
Flash-Chip: NANYA NT5TU32M16DG-AC
Flash size: 8192 KiB
RAM: 64 MiB
Wireless: 802.11b/g/n
Ethernet: 10/100 full duplex
USB: Yes 1 x 2.0 ar7240-ehci
Serial: Yes - tested working over TTL converter (3.3V!)
JTAG: Nope
与之同价格档次的TP-LINK TL-WR706N 150M迷你型无线路由器 AR9331 SOC 2MB Flash/16MB RAM 相比之下简直是垃圾。我花数百元购买的TP-LINK TL-WR2543N,也不过是8MB Flash, 64MB RAM内存
还有,D-Link DIR-505 自带不死恢复模式,调试OpenWrt系统出现问题时我们既可以进 D-Link 的恢复模式刷新固件,也可以进入 OpenWrt 的恢复模式刷新固件,可谓是最安全的路由器
如何购买 D-Link DIR 505 A1
我不是D-Link的员工,也无意为其做广告。DIR-505是我购买的第一款D-Link路由器
我是2014年8月从淘宝 D-Link官方旗舰店买的 D-Link DIR 505 A1,69元, 固件版本号:1.03CN。买了后,看了下手机淘宝,只要59元。准备再入一个,都刷上 OpenWrt,方便随时随地无障碍上网
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
如何进入 DIR-505 恢复模式
在学习OpenWrt可能要测试很多配置,有时会出现错误,需恢复或补救,这时就需要进入路由器的恢复模式
有两种方法进入 DIR-505 的恢复模式
进入D-Link 恢复模式
把 DIR-505和计算机用网线连接起来,设置计算机网卡的IPv4地址为 192.168.0.98, 子网掩码 255.255.255.0, 在路由器启动时顶住 reset 孔,当红色指示灯开始缓慢闪烁时,松开reset孔。然后浏览器打开 192.168.0.1,这里你可以上传原厂固件或刷 OpenWrt 固件
Plug in your computer to the unit, assign it an ip address of 192.168.0.98, and boot the unit up while holding down the reset. Once the red light starts to blink slowly, release the reset, and go to 192.168.0.1 on your web browser. From there you can upload a new image. After successful flashing, you'll see a "Success" page in your browser.
刷新固件完成后,重新改回自动获取IP地址
进入 OpenWrt 恢复模式
用网线将路由器和电脑连接起来,将电脑网卡的IPv4地址设置成 192.168.1.97
路由器插上电源重新开机, 在启动时多次按压路由器侧面的圆形 WPS 按钮直到 LED 指示灯开始快速闪烁
For the generic failsafe mode you can follow https://openwrt.org/zh-cn/doc/howto/generic.failsafe You can use the WPS button for that. While booting up, just press it several times until the LED flashes very quick. If you're still not able to telnet it on 192.168.1.1 maybe there's something wrong on the client-side.
接下来就是ubuntu 里 telnet 进入 OpenWrt 并设置 root 密码
telnet 192.168.1.1
telnet连上后就设置root密码,自动启用 ssh:
root@OpenWrt:/# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root
root@OpenWrt:/#
可以在 Ubuntu 里 Ctrl + Shift + t 新开一个命令行窗口,尝试 ssh 连接OpenWrt:
ssh root@192.168.1.1
如果 ssh 连上了,则后面设置的内容和 前面 TLWR-2543N 科学上网教程一样了
要注意的是,D-Link DIR-505 使用接口名称 eth1 而不是通常的 eth0
Other than similar routers (e.g., the TP-Link TL-WR703N), the D-Link DIR-505 uses the interface eth1 rather than eth0. This means that if you build your own firmware, you must configure /etc/config/network accordingly (option ifname 'eth1'), or you will not be able to connect later on via Ethernet.
如果 telnet 连不上,尝试一下直接ssh登录
设置D-Link DIR-505k路由器无线连接
在没有设置无线连接前,要登录OpenWrt,必须用网线把电脑和路由器连接起来,不太方便。设置无线连接后,电脑就可以通过无线方式连上路由器,再登录 DIR-505 OpenWrt 进行设置
uci set wireless.@wifi-device[0].disabled=0;
uci set wireless.@wifi-iface[0].ssid='eastking-dir505';
uci set wireless.@wifi-iface[0].encryption='psk2+ccmp';
uci set wireless.@wifi-iface[0].key='icanfly9876';
uci commit wireless;
wifi
设置好无线连接后,就可以拔掉电脑的有线连接,连接无线,再ssh登录路由器
相关资源:
- https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
- https://forum.openwrt.org/viewtopic.php?id=38742&p=8
- https://openwrt.org/toh/d-link/dir-505
- https://my.oschina.net/umu618/blog/271630
D-Link DIR-505 A1 刷 OpenWrt固件过程
D-Link 路由器是锁区的, 不能直接刷OpenWrt 固件。要先到D-Link 官方国际站下载原厂固件,用16进制编辑器把DEF改成CN,升级固件,再刷OpenWrt固件
下载D-Link DIR-505 A1 国际版官方固件
https://openwrt.org/toh/d-link/dir-505
下载地址:
- http://support.dlink.com.au/download/download.aspx?product=DIR-505
- ftp://files.dlink.com.au/products/DIR-505/REV_A/Firmware/
用16进制编辑器修改固件的国家代码,DEF 改成 CN
准备一个16进制编辑器,在本文中,我用的是Ubuntu下的轻量级16进制编辑器GHex,把固件拖到GHex打开固件
修改后变成如下:
Alt + S 保存对固件的修改
你也可以到下面网址直接下载修改好16进制值的固件:
https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
刷修改国家后的官方固件
按照路由器官方手册,电脑连上路由器
在 Ubuntu 下电脑连接 DIR-505 路由器的方法:
DIR-505 路由器出厂默认设置没有开启 DHCP,所以我们要给电脑手动设置和路由器同网段的 IPv4 地址才能连上路由器
路由器插上电源。右上角无线信号处,选择 Edit Connections, 选择dlink-xxxx, xxxx为路由器MAC ID 的后4位,Edit..., IPv4 Setings, Method选择 Manula 手动,Address 选择 Add, 设置:
- Address: 192.168.0.9
- Netmask: 255.255.255.0
- Gateway: 192.168.0.1
如此设置好后电脑就能连上无线网络dlink-xxxx了
浏览器首次进入 http://192.168.0.1 会出现设置向导,点取消,然后会出现密码登录页面:
直接点击 登入 按钮,再点击界面上部的 维护,然后点击左侧栏的 固件 进入升级固件页面,点击 Browse... 上传我们修改好的固件:
然后点击 上传 按钮完成刷新固件,接下来就可以刷 OpenWrt固件了
DIR-505A1 刷 OpenWrt 固件
下载 OpenWrt 固件 for DIR-505A1:
- http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/
- http://downloads.openwrt.org/snapshots/targets/ar71xx/generic/openwrt-ar71xx-generic-dir-505-a1-squashfs-factory.bin
DIR-505刷OpenWrt固件:
我们是在原厂固件上刷 OpenWrt,一定要下载 factory.bin.上传后,等待150秒,DIR-505A1 成功刷上了 OpenWrt 开源固件
相关资源:
- https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
- https://my.oschina.net/umu618/blog/268466
D-Link DIR-505启用工作模式开关
DIR-505 硬件开启四种应用模式
D-Link DIR-505 在全球销售多款型号,不同型号外观不一样,但内部硬件是一样的。在中国销售的 DIR-505 A1, 也就是本教程所用的型号, 模式开关共有三档,在开关处动动手,就可以启用四种模式
撕掉标贴,去掉螺丝,就可以打开DIR-505,把开关剪短,剪掉挡住开关上推的底面,完工后如下图:
Router模式和AP模式
便携式式无线路由器常有Router模式和AP模式,有的路由器用两个档位对应这两种模式,拨到Router档就用Router模式,拨到AP档就用AP模式。DIR-505 原厂固件,Router和AP共用一个档位,需要用哪种,需要登录路由器进行选择和设置。现在我们已经刷了 OpenWrt,档位对应的模式需要自己定义设置
在本教程中,把新开的第四档作为AP档,原来的Router/AP档作为Router档
在Router模式时,DIR-505作为无线路由器使用,有线接口作为WAN口,连接到ADSL Modem。计算机通过无线的方式连接到路由器。在这种模式下一般需要设置拨号上网帐号
在AP模式时,通常在DIR-505前端还有路由器,DIR-505的有线接口作为LAN口使用,前端路由器的LAN口引出网线连接到DIR-505. 在宾馆上网,把有线扩展为无线常应用此种模式
/etc/rc.local 利用 GPIO 读取开关位置
rc.local内容如下:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
if [ ! -f /etc/config/backup/network ]; then
cp /etc/config/network /etc/config/backup/
cp /etc/config/wireless /etc/config/backup/
cp /etc/config/firewall /etc/config/backup/
cp /etc/config/dhcp /etc/config/backup/
fi
read_gpio() {
(echo $1 > /sys/class/gpio/export) >& /dev/null
(echo "in" > /sys/class/gpio/gpio$1/direction) >& /dev/null
return `cat /sys/class/gpio/gpio$1/value`;
}
read_gpio 19;
v=$?;
read_gpio 20;
v=$v$?;
read_gpio 21;
v=$v$?;
read_gpio 22;
v=$v$?;
read_gpio 23;
v=$v$?;
case "$v" in
10001) v="router";;
11001) v="repeater";;
01001) v="hotspot";;
11000) v="ap";;
*) v="error";;
esac
/usr/bin/$v
logger working mode: $v
exit 0
原理:先备份原始的配置文件,不同模式的设置都是基于原始配置文件,以免出现混乱
在/usr/bin目录下创建相应模式的bash文件,根据不同的GPIO值调用的不同的文件 在本教程中中主要应用 /usr/bin/router和 /usr/bin/ap这两个文件
代码的最新版本,请查看:
你使用时,可以直接下载整个项目到本地,所有配置文件自然在其中:
git clone https://github.com/softwaredownload/openwrt-fanqiang
相关资源:
- https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
- https://my.oschina.net/umu618/blog/273945
DIR-505 Router 模式
/usr/bin/router 代码:
#!/bin/sh
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2014-08-22
cp /etc/config/backup/* /etc/config/
uci delete network.lan.ifname
uci delete network.lan.type
uci add network interface
uci rename network.@interface[-1]='wan'
uci commit network
uci set network.wan.ifname='eth1'
uci set network.wan.peerdns=0
uci set network.wan.proto='pppoe'
uci set network.wan.username='wan-username'
uci set network.wan.password='wan-password'
uci set network.wan.peerdns=0
uci commit network
# default is no this option
#uci set dhcp.lan.ignore=0
#uci commit dhcp
uci set wireless.@wifi-device[0].channel=11
uci set wireless.@wifi-device[0].txpower=15
uci set wireless.@wifi-device[0].disabled=0
uci set wireless.@wifi-device[0].country='CN'
uci set wireless.@wifi-iface[0].mode='ap'
uci set wireless.@wifi-iface[0].ssid='eastking-dir505'
uci set wireless.@wifi-iface[0].encryption='psk2'
uci set wireless.@wifi-iface[0].key='icanfly9876'
uci commit wireless
wifi
/etc/init.d/network restart
代码说明:
先把备份的原始配置文件覆盖到配置文件目录,所有设置都基于原始配置文件 在使用Router 模式时,有线接口为WAN口,这时wan的 interface name 是 eth1, 默认lan的interface name 使用了 eth1, 要删除
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/dir505
- https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
DIR-505 AP 模式科学上网教程
/usr/bin/ap 代码:
#!/bin/sh
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2014-08-22
cp /etc/config/backup/* /etc/config/
uci set network.lan.gateway=192.168.1.1
uci set network.lan.dns=192.168.1.1
uci set network.lan.ipaddr=192.168.1.97
uci commit network
uci set dhcp.lan.ignore=1
uci commit dhcp
uci set wireless.@wifi-device[0].channel=11
uci set wireless.@wifi-device[0].txpower=15
uci set wireless.@wifi-device[0].disabled=0
uci set wireless.@wifi-device[0].country='CN'
uci set wireless.@wifi-iface[0].mode='ap'
uci set wireless.@wifi-iface[0].ssid='eastking-dir505'
uci set wireless.@wifi-iface[0].encryption='psk2'
uci set wireless.@wifi-iface[0].key='icanfly9876'
uci commit wireless
wifi
/etc/init.d/network restart
代码说明:
在AP模式下,DIR-505的有线接口作为LAN口使用,连接到前端路由器的LAN口 假设DIR-505前端路由器的IP地址是192.168.1.1,设置DIR-505的lan 网关和dns都是192.168.1.1,再设置 DIR-505的 lan IP地址为192.168.1.97
DIR-505穿越功夫网科学上网方法
假设上级路由器没有设置科学上网:
电脑设置无线连接 eastking-dir505:IPv4地址是 192.168.1.53(不同于路由器的地址),设置子网掩码为255.255.255.0,网关和DNS为路由器的地址即192.168.1.97,重启路由器后,电脑连上 eastking-dir505 即可自动科学上网
原理:以DIR-505作为DNS服务器,我们已经把DIR-505设置成科学上网路由器,自然可以打败功夫网了
假设上级路由器已经科学上网:
电脑设置无线连接 eastking-dir505为DHCP即可 原理:以上级路由器作为DNS服务器,上级路由器已经科学上网,二级路由器就可以免设置自动科学上网了
如果你想节省路由器资源,这时就可以禁用 dir-505 dns及科学上网相关服务:
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq disable
/etc/init.d/shadowsocks stop
/etc/init.d/shadowsocks disable
代码的最新版本,请查看:
相关资源:
- https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
- https://openwrt.org/docs/guide-user/network/wifi/bridgedap
编译OpenWrt全自动科学上网固件 for D-Link DIR-505 A1
除了增加模式转换开头,其他和编译 NetGear WNDR4300科学上网固件一样
你也可以直接下载编译好的科学上网固件: https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
下载适合D-Link DIR505无线路由器的Image Builder
Image Builder又叫Image Generator,利用它我们可以方便地定制适合自己无线路由器的固件
选择 OpenWrt版本::
-
进入 http://downloads.openwrt.org/
-
Stable Release, 最后发行的稳定版本:
- OpenWrt 18.06.1
- Released: Sat, 18 Aug 2018
-
进入 http://downloads.openwrt.org/releases/18.06.1/targets/
选择 CPU 类型::
选择 ar71xx: http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/
选择 Flash 类型::
选择 generic:
http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/generic/
下载 Image Builder for DID-505:
-
页面搜索 dir-505 找到适合你的版本号,比如我的是 dir-505-a1
-
下载 Image Builder:
cd ~/Downloads wget http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/generic/openwrt-imagebuilder-18.06.1-ar71xx-generic.Linux-x86_64.tar.xz tar -xf openwrt-imagebuilder-18.06.1-ar71xx-generic.Linux-x86_64.tar.xz mv openwrt-imagebuilder-18.06.1-ar71xx-generic.Linux-x86_64 openwrt-imagebuilder-generic
确定OpenWrt无线路由器的PROFILE值
cd openwrt-imagebuilder-generic
make info
找到自己固件的型号,D-Link DIR 505 A1的PROFILE值是DIR505A1。如下图:
找出默认应该包含进OpenWrt固件的包
对于D-Link DIR-505 A1 无线路由器来说,可以这样获取:
echo $(wget -qO - http://downloads.openwrt.org/releases/18.06.1/targets/ar71xx/generic/config.seed | sed -ne 's/^CONFIG_PACKAGE_\([a-z0-9-]*\)=y/\1/ip')
2018-09的基础包:
libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd
默认包:
运行命令:
make info
在顶部会列出:
Current Target: "ar71xx (Generic devices with GENERIC flash)" Default Packages:
base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c
所有型号路由器共用包:
Default:
Default Profile
Packages:
kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport
特定路由器型号专属包,列出在PROFILE的下面,对于 DIR505A1:
kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
自定义包:
wget bind-dig iptables-mod-tproxy kmod-ipt-tproxy ip-full dnsmasq-full simple-obfs libmbedtls libcares libev libsodium shadowsocks-libev
-
libmbedtls libcares libev libsodium shadowsocks-libev
shadowsocks-libev 及依赖,需要自己编译,或下编译好的包:
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
-
simple-obfs 是 shadowsocks-libev 混淆插件,需要自己编译,或下载编译好的包:
https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
-
iptables-mod-tproxy kmod-ipt-tproxy ip-full 用于防火墙 UDP 转发
-
dnsmasq-full 需要配合 shadowsocks 客户端 ss-tunnel 使用
Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由
默认的dnsmasq为base版本,该版本不能对特定的域名地址进行标记操作(因为我们需要对一些特定域名如twitter等进行标记),改为更加强大的dnsmasq-full
-
bind-dig 可以调试域名解析
上述包整合在一起并去重复。简单方法是复制到 Sublime Text, 以空格分隔,再用正则把空格 替换成 \n, 然后 Edit -> Permute Lines -> Unique
注意,在编译前要把自己编译的 shadowsocks-libev 及其他要用到的 .ipk 文件放到ImageBuilder的目录下packages
按照教程 编译shadowsocks-libev for OpenWrt ipk安装包
下载和设定自定义科学上网配置文件
下面以linux系统 ~/Downloads 下操作为例
cd ~/Downloads
git clone https://github.com/softwaredownload/openwrt-fanqiang
本地项目文件夹是: ~/Downloads/openwrt-fanqiang
建立一个配置文件夹,以路由器型号结束,如 ~/Downloads/openwrt-dir505
cd ~/Downloads
mkdir openwrt-dir505
cd openwrt-fanqiang
cp -R openwrt/default/* ~/Downloads/openwrt-dir505/
cp -R openwrt/dir505/* ~/Downloads/openwrt-dir505/
上面的操作,先复制共用的配置文件 openwrt/default/* 到 openwrt-dir505目录下
然后复制dir505专用的配置文件到 openwrt/dir505/* 到 openwrt-dir505目录下,如果有同名文件就覆盖
设置可执行权限
cd ~/Downloads/openwrt-dir505
chmod +x usr/bin
chmod +x usr/bin/*
chmod +x etc/uci-defaults
chmod +x etc/uci-defaults/*
说明:etc/uci-defaults目录下的文件会在路由器第一次启动时执行一次。在这里我们设置一些常用值
必须修改的DIR505科学上网配置文件:
-
~/Downloads/openwrt-dir505/etc/shadowsocks-libev/config.json
server改成你的服务器实际IP
-
~/Downloads/openwrt-dir505/usr/bin/router
wan-username 和 wan-password改成实际值
-
~/Downloads/openwrt-dir505/usr/bin/ss-firewall-asia
1.0.9.8必须改成你的服务器实际IP
自动复制和修改DIR-505科学上网设置文件
config-dir505.sh:
#!/bin/bash
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# Date: 2015-12-24
REPOSITORY=~/Downloads/openwrt-fanqiang
CONFIG=~/Downloads/openwrt-dir505
createdir() {
rm -rf $CONFIG
mkdir $CONFIG
}
copy() {
cp -R $REPOSITORY/openwrt/default/* $CONFIG/
cp -R $REPOSITORY/openwrt/dir505/* $CONFIG/
}
setmod() {
chmod +x $CONFIG/usr/bin/ss-firewall-asia
chmod +x $CONFIG/etc/uci-defaults
chmod +x $CONFIG/etc/uci-defaults/*
}
modify() {
# server ip address
sed -i 's/1.0.9.8/server_ip/' $CONFIG/etc/shadowsocks-libev/config.json
# server_port
sed -i 's/1098/server_port/' $CONFIG/etc/shadowsocks-libev/config.json
# local_port
sed -i 's/7654/7654/' $CONFIG/etc/shadowsocks-libev/config.json
# password
sed -i 's/killgfw/killgfw/' $CONFIG/etc/shadowsocks-libev/config.json
# method
sed -i 's/chacha20-ietf-poly1305/chacha20-ietf-poly1305/' $CONFIG/etc/shadowsocks-libev/config.json
# server ip addresss
sed -i 's/1.0.9.8/server_ip/' $CONFIG/usr/bin/ss-firewall-asia
# local_port
sed -i 's/7654/7654/' $CONFIG/usr/bin/ss-firewall-asia
# ppoe username
sed -i 's/wan-username/wan-username/' $CONFIG/usr/bin/router
# ppoe password
sed -i 's/wan-password/wan-password/' $CONFIG/usr/bin/router
# wifi password
sed -i 's/icanfly9876/icanfly9876/g' $CONFIG/usr/bin/ap
sed -i 's/icanfly9876/icanfly9876/g' $CONFIG/usr/bin/router
# root password
sed -i 's/\\nfanqiang/\\nfanqiang/' $CONFIG/etc/uci-defaults/defaults
}
if [ "$1" = "createdir" ]; then
createdir
elif [ "$1" = "copy" ]; then
copy
elif [ "$1" = "setmod" ]; then
setmod
elif [ "$1" = "modify" ]; then
modify
else
echo "usage: createdir copy setmod modify"
fi
用法:在 config-dir505.sh所在目录运行:
./config-dir505.sh createdir
./config-dir505.sh copy
./config-dir505.sh setmod
./config-dir505.sh modify
开始编译OpenWrt自动科学上网固件
cd ~/Downloads/openwrt-imagebuilder
make image PROFILE=DIR505A1 PACKAGES="libiwinfo-lua liblua liblucihttp liblucihttp-lua libubus-lua lua luci luci-app-firewall luci-base luci-lib-ip luci-lib-jsonc luci-lib-nixio luci-mod-admin-full luci-proto-ipv6 luci-proto-ppp luci-theme-bootstrap rpcd rpcd-mod-rrdns uhttpd base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd kmod-gpio-button-hotplug swconfig kmod-ath9k wpad-mini uboot-envtools iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport wget bind-dig iptables-mod-tproxy kmod-ipt-tproxy ip-full dnsmasq-full simple-obfs libmbedtls libcares libev libsodium shadowsocks-libev -dnsmasq" FILES=~/Downloads/openwrt-dir505
编译好的的固件在ImageBuilder的bin/targets/ar71xx/目录下
然后把编译出的固件刷进路由器,重启路由器后后就能免设置智能科学上网
升级固件要用到的是 ...sysupgrade.bin,如果在原厂固件上刷要用 ...-factory.bin
先本地修改好配置文件再编译,然后把科学上网固件刷进D-Link DIR-505 A1后,就能零设置智能、自动科学上网
只要配置文件设置不出差错,编译固件一般都能成功,保存好这个固件,以后随便折腾路由器,出现问题大不了重刷一次,几分钟时间就一切都恢复正常
相关资源:
- https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
- https://software-download.name/2014/shadowsocks-libev-polarssl-ar71xx-ipk-latest/
- https://openwrt.org/zh-cn/doc/howto/obtain.firmware.generate
D-Link DIR-505 A1 刷通用OpenWrt固件
照前面的教程自己编译科学上网固件,编译出来后刷进路由器,就能实现零设置自动科学上网。出于各种原因,有的朋友可能不想自己编译固件,又想用DIR-505实现智能科学上网,就要下载预编译的通用科学上网固件,刷好后,登录路由器,用vi修改少数几个设置,就能实现智能科学上网,本教程就是针对这些朋友而写
路由器的开关拨到刻有 Router/AP 字样的档位,如果你没有给路由器动过手术,就是从上往下数的第一档
DIR-505原厂固件刷科学上网固件的方法
适合购买了D-Link DIR-505 A1后没有刷过任何固件的朋友
刷修改了16进制值的原厂固件:
到下面地址下载已经修改了16进制值的原厂固件: https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
照官方手册说明网页登录路由器,刷新固件
刷DIR-505的科学上网固件 factory.bin:
到下面地址下载用于 DIR-505的科学上网固件:
https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
下载 openwrt-ar71xx-generic-dir-505-a1-squashfs-factory.bin
按照官方手册的说明刷新固件
OpenWrt固件基础上升级到科学上网固件
注意,下面步骤适合于你已经在你的DIR-505上刷了OpenWrt固件,你想要升级到可以自己科学上网的openwrt固件
下载科学上网固件 sysupgrade.bin:
到下面地址下载用于 DIR-505的科学上网固件 openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin: https://software-download.name/2014/dlink-dir-505-openwrt-fanqiang/
命令行上传固件到路由器:
电脑通过网线或无线连接到路由器,然后::
cd ~/Downloads/openwrt-imagebuilder/bin/targets/ar71xx/
scp openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/
ssh登录OpenWrt路由器 ssh root@192.168.1.1 cd /tmp
sysupgrade升级固件并取消保留原来配置文件:
root@OpenWrt:/tmp# sysupgrade -n openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin
参数 -n
表示升级时不保留原来的配置文件
等待两分钟等刷新固件并重启完成
相关资源:
登录并设置 DIR-505 OpenWrt 科学上网固件
ADSL Modem网线连接到路由器的有线接口。路由器的开关拨到刻有 Router/AP 字样的档位,如果你没有给路由器动过手术,就是从上往下数的第一档。本文以router模式为例,如果你的应用场景是ap模式,请自行相应变通
电脑连接DIR-505路由器
电脑连接到无线 网络 eastking-dir505
无线密码:
2014-09-01版: wsjdw,8181
新版都是: icanfly9876
ssh 登录 OpenWrt 科学上网固件
ssh root@192.168.1.1
输入密码 fanqiang
登录ssh
有时会提示错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
cf:c5:12:34:56:0b:4d:1c:56:48:6a:87:04:cf:b8:83.
Please contact your system administrator.
Add correct host key in /home/openwrt-fanqiang/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/openwrt-fanqiang/.ssh/known_hosts:3
remove with: ssh-keygen -f "/home/openwrt-fanqiang/.ssh/known_hosts" -R 192.168.1.1
RSA host key for 192.168.1.1 has changed and you have requested strict checking.
Host key verification failed.
解决办法就是复制并运行提示中的清理命令:
ssh-keygen -f "/home/openwrt-fanqiang/.ssh/known_hosts" -R 192.168.1.1
然后就可以正常登录了
登录后用vi修改设置:
root@OpenWrt:~# vi /etc/shadowsocks-libev/config.json
root@OpenWrt:~# vi /usr/bin/router
#如果是ap模式
root@OpenWrt:~# vi /usr/bin/ap
root@OpenWrt:~# vi /usr/bin/ss-firewall-asia
分别修改以下值:
- shadowsocks.json中,server改成你的服务器实际IP
- router/ap中 wan-username 和 wan-password改成实际值
- ss-firewall中,1.0.9.8必须改成你的服务器实际IP
如果你还改了其他默认值,请自行修改相应文件。不建议修改其他默认值,以提高一次成功率。熟悉以后,建议修改shadowsock密码
执行以下命令使修改生效
root@OpenWrt:~# /etc/init.d/shadowsocks restart
root@OpenWrt:~# /etc/init.d/dnsmasq restart
root@OpenWrt:~# /etc/init.d/network restart
# 查看 dnsmasq ss-redir ss-tunnel是否在运行。科学上网出出现故障的时候也要查看:
ps
2015-12-24测试router模式, 修改配置文件,编译出固件,刷进路由器,然后不用再修改任何设置就可以科学上网
等待约两分钟,就可以测试是否可以在网上畅行无阻了
相关资源:
全面优化科学上网系统
经过测试,科学上网系统经过优化以后,可以显著提高科学上网上网的速度,使用 Zgo VPS 的 VPS, youtube.com 1080P视频无压力
一般情况下,我们优化以下几项就可以了:
- 开启 TCp fast open
- 开启 BBR 加速
- 优化打开文件数目
- 设置 swap 交换文件
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
Ubuntu OpenWrt 开启 TCP Fast Open,检查是否启用
什么是 TCP Fast Open - TFO
TCP Fast Open,简称TFO, 意思是TCP快速打开,是对计算机网络中传输控制协议(TCP)连接的一种简化握手手续的拓展,用于提高两端点间连接的打开速度
二个人只有在认识的基础上才可能深入交流。客户端和服务要传递数据,也需要先“认识”,称为“握手”,握手成功才正式开始传送数据
服务端和客户端传递数据前需要握手三次,这会导致延时,启用 TFO 后,如果验证成功,它可以在三次握手最终的ACK包收到之前就开始发送数据,这样便跳过了一个绕路的行为,于是在传输开始时就降低了延迟
也就是说,TFO 降低了握手阶段的延迟,至于握手成功后数据传递的速度,和 TFO 是没有关系的
开启 TCP Fast Open 快速打开的先决条件
Linux kernel 3.7 及以上才支持 TCP Fast Open
在服务端的Ubuntu 检查一下:
uname -r
4.15.0-34-generic
再登录客户端 OpenWrt 路由器确认一下是否可以打开 TCP Fast Open
uname -r
4.9.120
Linux kernel 3.13 及以上默认已经开启了TFO,Linux服务器检查TCP Fast Open是否开启的方法:
cat /proc/sys/net/ipv4/tcp_fastopen
1
如果返回 0 表示没有开启TFO,非0则是默认开启了
tcp_fastopen三个数值选项的含义
tcp_fastopen选项是二进制位掩码,其中第一位启用或禁用客户端支持(默认开启),第二位设置服务端支持(默认关闭),第3位设置是否允许SYN数据包中的数据而不使用TFO cookie选项
-
tcp_fastopen = 1
只能在传出连接上启用(仅限客户端)
-
tcp_fastopen = 2
仅在侦听套接字(服务端)上允许TFO
-
tcp_fastopen = 3
客户端和服务端都启用TFO
请注意,即使启用了这些选项,也必须启用应用程序级支持。我们在服务端和客户端的操作系统上启用了 tcp fast open,如果软件层面不支持,还是起不到TCP通信加速的作用
临时启用双向 tcp_fastopen
$ sudo sysctl -w net.ipv4.tcp_fastopen=3
$ cat net.ipv4.tcp_fastopen
3
查看一下 sysctl -w的用法:
$ sysctl --help | grep write
-w, --write enable writing a value to variable
-w 意思是把指定值写入变量
Ubuntu系统开启 TFO 加速
通过 sysctl 我们可以定义内核参数
自定义 TFO 有两种途径:
- /etc/sysctl.conf
- /etc/sysctl.d/*.conf
这两种途径有什么区别?
/etc/sysctl.d/README:
This directory contains settings similar to those found in /etc/sysctl.conf. In general, files in the 10-.conf range come from the procps package and serve as system defaults. Other packages install their files in the 30-.conf range, to override system defaults. End-users can use 60-*.conf and above, or use /etc/sysctl.conf directly, which overrides anything in this directory.
/etc/sysctl.d/目录包含与/etc/sysctl.conf中类似的设置。通常,10-.conf范围内的文件来自procps包和 作为系统默认值。 其他包安装他们的文件30-.conf范围,覆盖系统默认值。 最终用户可以使用60 -*.conf 以上,或直接使用/etc/sysctl.conf,它会覆盖任何内容 这个目录
也就是开头数字小的.conf先加载,后面的覆盖前面,最后加载/etc/sysctl.conf
网上的教程一般是把 TFO 设置写在 /etc/sysctl.conf,那么哪一种方式最佳呢
有少数的软件包建议直接编辑/etc/sysctl.conf,但这可能是为了与旧的GNU / Linux发行版的兼容,最近软件包一般建议使用.d配置目录,这样更加灵活
用的.d目录(如/etc/sysctl.d/)的重点是允许应用程序/管理员在那里添加文件,这比添加或删除单个文件中的条目更容易,更安全。 例如,可以将TFO的参数放在文件/etc/sysctl.d/98-tcp_fastopen.conf中,一看就知道这些参数是针对tcp_fastopen的。 任何自动化工具(包括安装程序)也更容易将文件放在目录中而不是附加到现有文件
明白了原理以后,自然尽量不去编辑 /etc/sysctl.conf 了
$ su
# echo 'net.ipv4.tcp_fastopen=3' > /etc/sysctl.d/98-tcp_fastopen.conf
# reboot
$ cat /proc/sys/net/ipv4/tcp_fastopen
3
上面命令,我们切换到 root 用户,把设置写入文件,然后重启Ubuntu验证,返回3说明设置正确
服务端生成 TCp fast open 持久化密钥
Linux 内核3.13开始,在应用程序首次设置相关的setsockopt系统调用选项时生成密钥。 在设置密钥之前,proc值全为零
默认情况下,由于密钥在系统重新启动之后不会持续存在,因此正规地使用TFO,应该包括通过sysctl安全地保存密钥,比如生成随机密钥,设置限制性文件权限。 这将确保客户端可以使用现有cookie而无需生成新密钥
要生成新密钥并通过sysctl进行持久化,可以执行以下命令:
$ su
# RAND=$(openssl rand -hex 16)
# NEWKEY=${RAND:0:8}-${RAND:8:8}-${RAND:16:8}-${RAND:24:8}
# echo "net.ipv4.tcp_fastopen_key=$NEWKEY" > /etc/sysctl.d/98-tcp_fastopen_key.conf
# chmod 600 /etc/sysctl.d/98-tcp_fastopen_key.conf; chown root /etc/sysctl.d/98-tcp_fastopen_key.conf
# sysctl -p /etc/sysctl.d/98-tcp_fastopen_key.conf
# unset RAND NEWKEY
转换 TCP fast open 密钥
在Linux环境下,有二种方法可以显示当TFO密钥:
- $ sudo cat/proc/sys/net/ipv4/tcp_fastopen_key
- $ sudo sysctl net.ipv4.tcp_fastopen_key
同理,以可以用之改变密钥
TFO密钥是16个字节,表示为32个字符的十六进制字符串,分为4个8个字符的块,用短划线分隔,类似这样:
32100e0a-9876daaf-7654b836-21096051
可以使用前述方法实现密钥的转换
在多服务器服务器环境中,您需要随机生成一次密钥,并在所有服务器上设置相同的密钥
如果有多个科学上网VPS,需要随机切换使用,建议所有VPS使用相同密钥
OpenWrt系统开启 TFO 流量加速
vi /etc/sysctl.conf
# add line
net.ipv4.tcp_fastopen = 3
执行如下命令使之生效:
sysctl -p
Shadowsocks 软件启用 TCP Fast Open 加速
在服务端和 OpenWrt 路由器的 shadowsocks-libev 配置文件 config.json / shadowsocks.json 中加上:
"fast_open": true
重启服务端和客户端 shadowsocks-libev
测试 shadowsocks 服务端 TFO 有没有正常工作
登录shadowsocks服务端 Ubnutu 后,运行命令测试:
# 清空 IP 记录
sudo ip tcp_metrics flush all
ip tcp_metrics
# 应该是空
这时你打开 https://www.youtube.com
然后运行命令:
ip tcp_metrics
如果正常,会看到数条类似下面的记录
216.58.200.277 age 5.356sec fo_mss 1380 fo_cookie 87aaa1f0c8761336 source 210.98.76
发现了 fo_mss
和 fo_cookie
字段没有,这是 TCP Fast Open 特有的字段,其中 fo_cookie 确认我们与行开头的IP地址216.58.200.277 的通信使用了TFO
如果系统还提供除了科学上网的其他网络服务,那么ip记录可能很多,其中一些记录并没有 fo_cookie 字段,可以运行命令把含有 fo_cookie的条目找出来:
ip tcp_metrics | grep fo_cookie
如果一条 fo_cookie 记录也找不到,说明开启 TFO 没有成功
查看 TCP fast open的详细工作状态
root用户用这条命令查看TCP fast open的详细状态:
root@ubuntu:~# grep '^TcpExt:' /proc/net/netstat | cut -d ' ' -f 87-92 | column -t
我得到的值是:
TCPOFOMerge TCPChallengeACK TCPSYNChallenge TCPFastOpenActive TCPFastOpenActiveFail TCPFastOpenPassive TCPFastOpenPassiveFail TCPFastOpenListenOverflow TCPFastOpenCookieReqd TCPFastOpenBlackhole TCPSpuriousRtxHostQueues BusyPollRxPackets TCPAutoCorking TCPFromZeroWindowAdv TCPToZeroWindowAdv TCPWantZeroWindowAdv
1 12 5 79 23 621 1 70 2 1 0 0 0 48 48 84
如果非 root 用户执行,结果是:
TCPFastOpenPassiveFail TCPFastOpenListenOverflow TCPFastOpenCookieReqd TCPFastOpenBlackhole TCPSpuriousRtxHostQueues BusyPollRxPackets
1 70 2 1 0 0
一定要注意,root用户才能查看 TCPFastOpenPassive 的值
测试 shadowsocks-libev 客户端有没有启用 TFO 加速
在shadowsocks-libev客户端 ss-rrdir | ss-tunnel 的启动参数中加上 -v
会在控制台显示 TFO 是否启用
kige@openwrt:~# /etc/init.d/shadowsocks stop
/usr/bin/ss-redir -v -b 0.0.0.0 -c /etc/shadowsocks-libev/config.json -f /var/run/shadowsocks.pid
TCP fast open 状态值含义
- TCPFastOpenActive - 成功的出站TFO连接数
- TCPFastOpenActiveFail - 收到的SYN-ACK数据包的数量,这些数据包未确认SYN数据包中发送的数据并导致无SYN数据的重传。 请注意原始SYN数据包包含cookie + 数据,这不是连接到不支持TFO的服务器的数量
- TCPFastOpenPassive - 成功的入站TFO连接数
- TCPFastOpenPassiveFail - TFO cookie无效的入站SYN数据包数
- TCPFastOpenCookieReqd - 请求TFO设置但没有cookie的入站SYN数据包数
- TCPFastOpenListenOverflow - 由于套接字已超过最大队列长度而将禁用TFO的入站SYN数据包的数量
上面检测 TCP fast open 状态,得到:
TCPFastOpenPassive
621
成功的入站TFO连接数621,这是各项值中的最大值,说明 TFO 工作正常
常见问题
-
当带有TFO的包经过路由器 可能会被丢包 不同运营商的策略也不同 如果配置了NAT地址池 在第二次连接时可能会成功 取决于NAT表老化时间 客户端IP改变和NAT之后的公网IP改变都会影响TFO的正常使用 服务端收到不正确的包后依旧可以发送syn-ack 且退回为3WHS 可以选择在服务端单方面将模式改为1或者客户端改为0 不影响服务端对外连接的性能
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/ubuntu/etc/sysctl.d/98-tcp_fastopen.conf
- https://bradleyf.id.au/nix/shaving-your-rtt-wth-tfo/
- 维基 TCP快速打开
- https://wikitech.wikimedia.org/wiki/TCP_Fast_Open
- https://www.keycdn.com/support/tcp-fast-open/
- 8.6 TCP Fast Open(TFO)
- 各种加密代理协议的简单对比
- https://xwvut.software-download.name/
Shadowsocks 服务端 Ubuntu 开启BBR加速
关于 BBR 加速算法
BBR是一款Google开发的TCP拥塞控制算法,开启这个算法的好处:
- 在有一定丢包率的网络链路上充分利用带宽。非常适合高延迟,高带宽的网络链路
- 降低网络链路上的buffer占用率,从而降低延迟。非常适合慢速接入网络的用户
先检查一下 Ubuntu 系统是否可以开启这个加速算法
uname -r
4.15.0-36-generic
Linux系统内核高于 4.9 就可以开启。如果你的系统内核低于4.9,升级 Ubnutu 到最新版本就可以了
下面默认 Ubuntu 内核版本高于4.9,基于KVM的 VPS(包括DO)
shadowsocks 服务端开启 BBR加速
开启 BBR 加速需要设置 Linux 内核参数。自定义内核参数最好的实践是这样的:
-
在 /etc/sysctl.d/ 下设置,尽量避免修改 /etc/sysctl.conf
-
文件名以数字开头,表示系统启动时文件加载的顺序,数字小的文件先加载,最后加载 sysctl.conf
-
文件名应该表示明确的意义,比如 50-tcp_fastopen.conf
kige@ubuntu:~$ su # echo 'net.core.default_qdisc=fq' > /etc/sysctl.d/98-bbr.conf # echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.d/98-bbr.conf # sysctl --system
上面命令切换到 root 用户,把设置写入 .conf,然后用 sysctl --system 从系统目录重新读入所有配置
不要用 sysctl -p 来代替 sysctl --system,因为 sysctl --system 和重启系统的效果类似,于是我们可以测试出重启系统后的情况
用了 98-bbr.conf 而不是 50-bbr-conf,是为了覆盖 50-default.conf 中设定的默认值: net.core.default_qdisc = fq_codel
fq 和 fq_codel 有什么区别
CoDel 是 controlled delay的缩写
-
net.core.default_qdisc = fq_codel
最好的通用qdisc
-
net.core.default_qdisc = fq
用于胖服务器,fq_codel用于路由器,在虚拟化环境中,底层服务器是路由器,客户虚拟机是主机
检查 BBR 模块有没有启动:
kige@ubuntu:~$ lsmod | grep bbr
返回值有 tcp_bbr
说明 bbr 已启动
再检查我们刚才设置的值是否已经起作用:
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr
$ sysctl net.core.default_qdisc
net.core.default_qdisc = fq
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/ubuntu/etc/sysctl.d/98-bbr.conf
- https://software-download.name/2014/fanqiang-jiaocheng/
- https://xwvut.software-download.name/
Ubuntu server 最大打开文件数目优化
如何查看系统打开文件数量的限制
如何在 Linux 系统下增加打开文件的最大数量? 如何在Linux下打开更多文件描述符?我们要根据系统原先的设定来决定是否要调整设置
可以使用以下命令显示系统允许的最大打开文件描述符数:
$ cat /proc/sys/fs/file-max
97898
我在 Ubuntu 18.04 上得到的最大打开文件描述符数量是 97898,也就是正常用户可以在单个登录会话中打开97898个文件
先查看一下当前用户会话的打开文件数的软限制和硬限制,可以使用下面命令:
$ ulmit -Sn
1024
$ ulimit -Hn
1048576
命令选项中 S 即 soft, H 即 hard
如何调整系统范围的文件描述符(FD)限制
可以通过Linux操作系统下的/etc/sysctl.conf文件更改整个系统中同时打开的文件描述符的数量
有时系统可能发生达到最大文件数的错误,如何解决此问题?
许多应用程序(如Oracle数据库或Apache Web服务器)需要此范围相当高。因此,您可以通过在内核变量 /proc/sys/fs/file-max 中设置新值来增加打开文件的最大数量
前面上面我们查看过,系统打开文件数限制是 97898,这个数字一般来说够大了,如果需要修改,可以如下设置
如下所示(以root身份登录):
#sysctl -w fs.file-max = 51200
以上命令强制限制为 51200 个文件,并即时生效
您需要编辑/etc/sysctl.conf文件并放入以下行,以便重新启动后设置仍然生效:
# vi /etc/sysctl.conf
fs.file-max = 51200
需要注意的是,直接修改 /etc/sysctl.conf 给管理带来了不便,最好是把所有的自定义设置放在单独文件中,这样我们备份系统或测试时就很安全、方便了
因此,我们应该在 /etc/sysctl.d/ 目录下创建一个 98-file-max.conf 文件,把自定义设置写在那里
# vi /etc/sysctl.d/98-file-max.conf
fs.file-max = 51200
保存并关闭文件。用户需要注销并重新登录才能使更改生效,或者只需键入以下命令:
# sysctl --system
使用命令验证您的设置:
# cat /proc/sys/fs/file-max
51200
或者这样:
# sysctl fs.file-max
51200
如何设置用户级别打开文件描述符 FD 限制
上述过程设置了系统范围的文件描述符(FD)限制。 但是,您可以通过编辑 /etc/security/limits.conf 文件 设置任意用户打开文件的限制
- 不同用户有单独的限制,因此请确保以您的进程使用的用户身份运行此限制
- 有一个硬限制(hard),一个软限制(soft)。 soft是您的进程必须遵守的实际限制,hard设置了软限制可以设置的最大数量
从上面查看可知,硬限制已经设置得比较大了,我们需要修改的是软限制
请记住,ulimit 查看得到的数值不能保证你的进程实际拥有的限制! 在初始化shell之后(或之前),有98种情况可以修改进程的限制数值
下面我们就来查看一下 shadowsocks-liev 进程的限制数值
先查找一下 ss-server的进程 ID,即PID
$ ps ax | grep ss-server
6543 ? Ss 0:02 /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -u
得到进程ID后,就可以这样查看 ss-server 的限制数值了
$ cat /proc/6543/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 3841 3841 processes
Max open files 32768 32768 files
Max locked memory 16777216 16777216 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 3841 3841 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
可见, ss-server 最大可以打开32768个文件,这个数字不算小吧,那么ss-server现在打开了多少个文件呢
/proc/{process_id}/fd 是一个目录,它为进程拥有的每个打开文件保存一个文件,因此很容易计算我们达到限制的接近程度:
$ sudo ls /proc/6543/fd | wc -l
54
哇,ss-server 远没有达到打开文件数目的上限,但是我们还是需要修改一下系统设置的,因为系统中有多个用户,有许多进程,我们也要照顾到她们的需求是不是:
$ sudo vi /etc/security/limits.d/98-nofile.conf
# add lines to it
* soft nofile 512000
root soft nofile 512000
如果你的系统原来的硬限制值也较小,那么可以这样设置:
$ sudo vi /etc/security/limits.d/98-nofile.conf
# add lines to it
* soft nofile 512000
* hard nofile 512000
root soft nofile 512000
root hard nofile 512000
开头的星号表示“将此规则应用于除root之外的所有用户”,您可以猜测到root开头的规则 仅为root用户设置限制。最后的数字当然是您设置的新限制
网上的优化教程一般是直接修改 /etc/security/limits.conf 文件,这样的做法并不好
重启系统,检查是否生效:
$ ulimit -Sn
512000
$ ulimit -Sn
1048576
原来通过 shadowsocks-libev 上传文件比较慢,原因可能在于BBR TCP加速需要打开更多的文件,当打开文件数超过系统设置的上限时就会出错,经设置98-nofile.conf后,文件上传速度就很快了
RHEL,CentOS,Fedora,Scientific Linux用户还需要编辑 /etc/pam.d/login 文件并添加/修改以下行(确保获得pam_limts.so):
$ sudo vi /etc/pam.d/common-session
# add this line to it
session required pam_limits.so
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/ubuntu/etc/security/limits.d
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/ubuntu/etc/sysctl.d
- https://github.com/shadowsocks/shadowsocks/wiki/Optimizing-Shadowsocks
- https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/
- https://software-download.name/2014/fanqiang-jiaocheng/
- https://xwvut.software-download.name/
Linux TCP UDP 网络性能优化
Shadowsocks 服务端系统网络性能优化的原则
- 在一开始,能不优化的都不优化
- 可以在以后的使用中逐步测试、改进和增加优化选项
为什么对优化持谨慎的态度?因为我们把多个优化选项放在同一个文件中,如果带来了某方面的副作用,给测试、排查带来了困难
最大队列大小优化
在通过TCP / UDP层处理数据之前,系统会将数据放入内核队列中。 net.core.netdev_max_backlog
值指定在传递到上层之前要放入队列的最大数据包数。 对于高网络负载,默认值是不够的,因此简单地增加此值可以解决内核导致的性能损失问题。 要查看默认值,请将sysctl与$ sysctl net.core.netdev_max_backlog一起使用。 默认值为1000,将其增加到3000以上将足以阻止数据包在10Gbps(或更多)网络中被丢弃
$ sysctl net.core.netdev_max_backlog
sysctl net.core.netdev_max_backlog = 1000
sudo vi /etc/sysctl.d/98-network-custom.conf
net.core.netdev_max_backlog = 4096
另一个类似的设置是 net.ipv4.tcp_max_syn_backlog
记住的连接请求的最大数量,但仍未收到来自连接客户端的确认。 对于内存超过128 MB的系统,默认值为1024,对于低内存计算机,默认值为128。 如果服务器过载,请尝试增加此数量
$ sysctl net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_max_syn_backlog = 128
sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_max_syn_backlog = 4096
最大挂起连接数优化
应用程序可以在处理一个连接之前指定要放入队列的最大待处理请求数。 当此值达到最大值时,进一步的连接开始退出。 对于发布大量连接的Web服务器等应用程序,此值必须很高才能使这些连接正常工作
$ sysctl net.core.somaxconn
net.core.somaxconn = 128
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.core.somaxconn = 4096
TCP FIN超时优化
在TCP连接中,双方必须独立关闭连接。 Linux TCP发送FIN数据包以关闭连接并等待FINACK直到定义超时值
$ sysctl net.ipv4.tcp_fin_timeout
sysctl net.ipv4.tcp_fin_timeout = 60
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_fin_timeout = 30
默认值(60)非常高,可以减少到20或30以使TCP关闭连接并释放资源以进行另一个连接
重用 TIME_WAIT 状态的套接字进行新连接
根据Linux文档,您应该使用TCP_TW_REUSE 标志允许重新使用TIME_WAIT状态的套接字进行新连接
在处理必须处理TIME_WAIT状态下的许多短TCP连接的Web服务器时,这似乎是一个不错的选择
$ sysctl net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_reuse = 0
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_tw_reuse = 1
tcp_keepalive_time 优化
TCP连接由两个套接字组成,每个套接字在连接的两端。 当一方想要终止连接时,它会发送另一方确认的RST数据包并关闭其套接字
然而,在此之前,双方将无限期地保持其套接字开放。 这使得一方可能有意或由于某些错误而关闭其插座,而无需通过RST通知另一端。 为了检测此场景并关闭过时连接,使用TCP Keep Alive处理
有三个可配置属性可确定Keep-Alives的属性。 在Linux上他们是1:
-
tcp_keepalive_time
默认7200秒
-
tcp_keepalive_probes
默认9
-
tcp_keepalive_intvl
默认75秒
这个过程是这样的:
- 客户端打开TCP连接
- 如果tcp_keepalive_time秒的连接是静默的,则发送一个空的ACK数据包
- 服务器是否使用自己的相应ACK进行响应?
- 没有
- 等待tcp_keepalive_intvl秒,然后发送另一个ACK
- 重复,直到已发送的ACK探测数等于tcp_keepalive_probes
- 如果此时未收到响应,请发送RST并终止连接
- 是:返回第2步
- 没有
默认情况下,在大多数操作系统上启用了此处理过程,因此一旦另一端无响应2小时11分钟(7200秒+ 75 * 9秒),则会定期移除死TCP连接
$ sysctl net.ipv4.tcp_keepalive_time
net.ipv4.tcp_keepalive_time = 7200
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_keepalive_time = 1200
启用智能MTU黑洞检测优化
一旦启用,您的操作系统将尝试使用路径MTU发现机制在客户端和服务器之间找到MTU
您可以通过运行 ip a
检查接口上的MTU:
$ ip a | grep mtu
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
什么是 MTU
MTU = Maximum Transmission Unit
当Internet上的主机想要发送一些数据时,它必须知道如何将数据分成数据包。 特别是,它需要知道数据包的最大大小。 主机可以发送的数据包的最大大小称为 Maximum Transmission Unit,最大传输单元,MTU
MTU越长,性能越好,但可靠性越差。 这是因为丢失的数据包意味着要重新传输更多数据,并且因为Internet上的许多路由器无法传输非常长的数据包
ICMP消息应该被传递给始发主机,而主机应该调整该特定连接的MTU设置。 此机制称为 Path MTU Discovery,路径MTU发现
从理论上讲,它很棒,但遗憾的是,在传送ICMP数据包时,很多事情都可能出错。 最常见的问题是由丢失ICMP数据包的防火墙配置错误引起的
路由器丢弃数据包但由于某种原因无法传递相关ICMP消息的情况称为 ICMP black hole,ICMP黑洞
当发生这种情况时,整个连接都会卡住。 发送方不断尝试重新发送丢失的数据包,而接收方仅确认传送的小数据包
RFC4821 提出了一种检测ICMP黑洞的机制,并尝试以智能方式调整路径MTU。 要在Linux类型上启用此功能,运行命令:
$ sysctl net.ipv4.tcp_mtu_probing
net.ipv4.tcp_mtu_probing = 0
$ sysctl net.ipv4.tcp_base_mss
net.ipv4.tcp_base_mss = 1024
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_mtu_probing = 1
tcp_mtu_probing,控制TCP分组化 - 层路径MTU发现。 可选三个 值:
- 0 已禁用
- 1 默认情况下禁用,在检测到ICMP黑洞时启用
- 2 始终启用,使用tcp_base_mss的初始MSS
net.ipv4.tcp_base_mss 设置发现中使用的起始MSS值,如果系统默认小于1024,可改成1024:
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_base_mss = 1024
参考*:
可选优化:内核缓冲区优化
查看ubuntu 18.04系统默认的套接字缓冲区大小:
$ sudo sysctl net.core.wmem_default
net.core.wmem_default = 212992
$ sysctl net.core.rmem_default
net.core.rmem_default = 212992
$ sysctl net.core.rmem_max
sysctl net.core.rmem_max = 212992
$ sysctl net.core.wmem_max
net.core.wmem_max = 212992
212992 bytes,换算成 KB,212992 / 1024 = 208 KB
这些参数显示分配给任何类型连接的默认和最大写入、读取缓冲区大小。 由于分配的空间来自RAM,因此默认值设置总是有点低。增加这一点可能会提高运行NFS等服务器的系统的性能。 将它们增加到256k / 4MB将最有效,否则您必须对这些值进行基准测试,以找到系统配置的理想值
我们把自定义网络优化都保存到/etc/sysctl.d/98-network-custom.conf
$ sudo vi /etc/sysctl.d/98-network-custom.conf
# 256 KB / 4 MB
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
# Or 256 Kb / 64 MB
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
67108864 bytes = 64 MB,这个值是比较大的,最好是测试一下,对于你的系统,这个值是否是最优值
可选优化:TCP缓冲区大小优化
查看一下系统默认值:
$ sysctl net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096 87380 6291456
$ sysctl net.ipv4.tcp_wmem
net.ipv4.tcp_wmem = 4096 16384 4194304
这些值是三个整数的数组,分别指定TCP读取和发送缓冲区的最小,平均和最大值
注意:值以页为单位。 要查看页面大小,请使用命令查看:
$ getconf PAGE_SIZE
4096
也就是设置的值必须是4096的倍数
TCP缓冲区最大值改成64 MB:
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 16384 67108864
或者TCP缓冲区最大值改成12 MB:
net.ipv4.tcp_rmem = 4096 87380 12582912
net.ipv4.tcp_wmem = 4096 16384 12582912
有的人推荐TCP缓冲区最大值为 4MB:
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
Linux 2.6 内核开始,有一个自动调整功能,可以动态调整TCP缓冲区大小,直到达到最大值。 默认情况下,此功能处于启用状态,我建议将其保持打开状态。 您可以通过运行以下命令来检查它:
$ cat /proc/sys/net/ipv4/tcp_moderate_rcvbuf
1
要在它关闭的情况下临时打开它,请使用下面给出的命令:
sysctl -w net.ipv4.tcp_moderate_rcvbuf = 1
如果您发现内核缓冲区是您的瓶颈,需要增加最大缓冲区大小,则此设置将空间分配为最大值。无需更改平均值,但必须将最大值设置为高于BDP(带宽延迟乘积)以获得最大吞吐量
BDP =带宽(B /秒)* RTT(秒),其中RTT(往返时间)可以通过ping到任何其他系统来计算,并以秒为单位查找平均时间
此项如上优化后可能造成上传文件失败或变慢,故列为可选优化
可选优化:Time Wait优化
TIME WAIT TCP套接字状态是套接字关闭但等待处理仍在网络中的数据包的状态。 参数tcp_max_tw_buckets是 TIME_WAIT 状态下的最大套接字数。 达到此数字后,系统将开始在此状态下销毁套接字
此限制仅用于防止简单的DoS攻击,您不得人为地降低限制,而是增加它(可能在增加安装的内存之后),如果网络条件需要超过默认值
$ sysctl net.ipv4.tcp_max_tw_buckets
net.ipv4.tcp_max_tw_buckets = 4096
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.tcp_max_tw_buckets = 5000
如果遇到大量的TCP 错误,如:
__ratelimit: 33491 callbacks suppressed
TCP: time wait bucket table overflow
可以增加 net.ipv4.tcp_max_tw_buckets
的值,比如 654320,前提是拥有足够的内存
请尝试以下命令来确定您是否有来自一个地址的大量连接,或者您是否受到分布式攻击
netstat -nt | cut -c 40- | cut -d: -f1 | sort | uniq -c | sort -n netstat -nt | cut -d: -f2 | sort | uniq -c | sort -n
如果您从几个IP地址获得高数字,则更容易限制连接。 然后,您可以向 iptables 添加拒绝规则或速率限制规则,以限制从这些地址访问
经测试,优化此项可能造成上传文件至某些网站超时或错误
可选优化:IP端口范围优化
net.ipv4.ip_local_port_range 显示可用于新连接的所有端口。 如果没有空闲端口,则连接将被取消。 增加此值有助于防止此问题
如果您的Linux服务器正在打开大量传出网络连接,则需要增加本地端口范围。 默认情况下范围很小。 例如,如果squid代理服务器用完了端口,它就会受到攻击。 其他示例包括繁忙的流量网络服务器,如nginx负载平衡器,LXD vm等
我们可以加大用于新连接的端口选择范围,但是有一个风险,某个程序使用的特定端口可能被该服务器上的其他程序随机选取源端口给占用掉了,解决办法是将服务监听的特定端口以逗号分隔全部添加到ip_local_reserved_ports中
ip_local_reserved_ports
逗号分隔范围列表指定为已知第三方保留的端口应用。 自动端口不会使用这些端口
赋值(例如,当使用port调用connect()或bind()时
数字0)。 显式端口分配行为保持不变
用于输入和输出的格式是逗号分隔范围列表,例如保留端口1,2,3,4和1可以这样指定:1,2-4,10-10
写入文件后将清除以前保留的所有内容端口并使用中给出的端口更新当前列表输入
请注意 ip_local_port_range
和 ip_local_reserved_ports
设置是独立的,并且都由内核考虑确定哪些端口可用于自动端口时分配
本科学上网方案 https://github.com/softwaredownload/openwrt-fanqiang shadowsocks-libev 服务端指定监听 1098 端口,1098 应该加入到 ip_local_reserved_ports
这样ip_local_port_range
无论怎么设置都不影响 shadowsocks-libev 监听在 1098 端口
$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
$ sysctl net.ipv4.ip_local_reserved_ports
# 默认空值
$ sudo vi /etc/sysctl.d/98-network-custom.conf
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.ip_local_reserved_ports = 1098
以上定义了TCP和UDP使用的本地端口范围选择本地端口。 第一个数字是第一个,第二个是最后一个本地端口号。 如果可能,这些数字具有不同的奇偶校验即一个偶数和一个奇数值是更好的。 默认值分别为32768和60999,或者由发行版或系统管理员设置的默认值。 在此示例中,1024 不是奇数,65535是奇数
无需优化
-
net.ipv4.tcp_syncookies
Ubuntu 18.04 以下已经默认设置:
net.ipv4.tcp_syncookies = 1
-
net.ipv4.tcp_tw_recycle
在 Linux 内核 4.12 开始已经移除这个选项了,ubuntu 18.04 不需要设置此值。如果你的内核较旧,可以增加设置:
net.ipv4.tcp_tw_recycle = 0
/etc/sysctl.d/98-network-custom.conf
net.core.netdev_max_backlog = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_mtu_probing = 1
使 Linux 系统网络优化立即生效:
sudo sysctl --system
需要注意的是,上面的TCP/UDP优化只是供参考,最佳的设置需要各人自己测试才能确定,设置不当可能会有问题,比如说使上传视频到外网变慢
在Ubuntu 18.04 系统上,我们经过逐项对照系统的默认值,得到上面的优化设置。如果你的系统不是 Ubuntu 18.04,可以在 Zgo VPS 创建一个新的 VPS,可以使用最新的 Ubuntu 系统,于就是可以按照本 科学上网教程 的方案进行系统优化
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/tree/master/ubuntu/etc/sysctl.d
- https://github.com/shadowsocks/shadowsocks/wiki/Optimizing-Shadowsocks
- https://opensourceforu.com/2016/10/network-performance-monitoring/
- https://software-download.name/2014/fanqiang-jiaocheng/
- https://xwvut.software-download.name/
Linux Ubuntu swap 交换文件优化
我们在 Digital Ocean 创建 VPS (Droplet) 时,最便宜的配置如下:
内存是 1GB,一般情况下是够用了,如果多开几个 shadowsocks 进程,多个用户同时上 youtube.com,那么内存可能会不够用,怎么办
可以设置 swap 交换文件。DO 硬盘都是 SSD,内存不够时可以使用硬盘的swap,速度也不错
注意:
尽管通常建议对使用传统旋转硬盘驱动器的系统进行交换,但使用SSD交换可能会导致硬件随着时间的推移而出现问题。 出于这种考虑,通常不建议在使用SSD存储的提供商上启用交换文件。 这样做会影响您和您的邻居的底层硬件的可靠性
检查系统是否设置过 swap
在开始之前,我们可以检查系统是否已经有一些可用的交换空间。 可以有多个交换文件或交换分区,但通常一个就足够了
我们可以通过键入以下内容来查看系统是否已配置了交换文件
sudo swapon - show
如果您没有收到任何输出,这意味着您的系统当前没有可用的交换空间
您可以使用 free 验证没有活动交换空间:
free -h
检查硬盘驱动器分区上的可用空间
为交换分配空间的最常用方法是使用专用于该任务的单独分区。 但是,改变分区方案并不总是可行的。 我们可以轻松创建驻留在现有分区上的交换文件
在我们这样做之前,我们应该键入以下内容来检查当前磁盘使用情况:
df -h
有足够的可用空间的时候,我们才能创建 swap 文件
创建 swap 交换文件
现在我们知道了可用的硬盘空间,我们可以在文件系统中创建一个交换文件。 我们将在根(/)目录中创建一个我们想要的交换大小的文件
创建交换文件的最佳方法是使用fallocate程序。 此命令立即创建预分配大小的文件
由于我们示例中的服务器具有1024MB的RAM,因此我们将在本教程中创建3 GB的文件。 调整此项以满足您自己的服务器的需求:
sudo fallocate -l 3G /swap
我们可以通过输入以下内容来验证是否保留了正确的空间量:
$ ls -lh /swap
-rw-r - r-- 1 root root 3.0G Dec 19 11:14 /swap
启用 swap 交换文件
现在我们有一个正确大小的文件,我们需要实际将其转换为交换空间
首先,我们需要锁定文件的权限,以便只有具有root权限的用户才能读取内容。这可以防止普通用户访问该文件,这会产生重大的安全隐患
通过键入以下内容使该文件只能由root访问:
sudo chmod 600 /swap
键入以下命令验证权限更改:
$ ls -lh /swap
-rw ------- 1 root root 3.0G Dec 19 11:14 /swap
如您所见,只有root用户启用了读写标志
我们现在可以通过键入以下内容将文件标记为交换空间
sudo mkswap /swap
标记文件后,我们可以启用交换文件,允许我们的系统开始使用它:
sudo swapon /swap
我们可以通过输入以下内容来验证交换是否可用:
sudo swapon - show
可以再次检查:
$ free -h
total used free shared buff/cache available
Mem: 985M 96M 113M 1.6M 775M 727M
Swap: 3.0G 268K 3.0G
使 swap 交换文件永久化
我们最近的更改已启用当前会话的交换文件。 但是,如果我们重新启动,服务器将不会自动保留交换设置。 我们可以通过将交换文件添加到 /etc/fstab
文件来更改此设置
备份 /etc/fstab
文件,以防出现任何问题:
sudo cp /etc/fstab /etc/fstab.bak
您可以通过键入以下内容将交换文件信息添加到 /etc/fstab
文件的末尾:
echo'/swap none swap sw 0 0'| sudo tee -a /etc/fstab
调整swap交换文件设置
您可以配置一些选项,这些选项会在处理交换时对系统的性能产生影响
调整 Swappiness 属性
swappiness参数配置系统将数据从RAM交换到交换空间的频率。这是介于0和100之间的值,表示百分比
值接近于零时,除非绝对必要,否则内核不会将数据交换到磁盘。请记住,与交换文件的交互是“昂贵的”,因为它们比与RAM的交互花费更长的时间,并且它们可能导致性能的显着降低。告诉系统不要太依赖交换通常会使您的系统更快
接近100的值将尝试将更多数据放入交换中以努力保持更多RAM空间。根据应用程序的内存配置文件或服务器的使用情况,在某些情况下可能会更好
我们可以通过输入以下内容来查看当前的swappiness值:
$ cat /proc/sys/vm/swappiness
60
对于桌面,swappiness设置为60并不是一个糟糕的值。对于服务器,您可能希望将其移近0
我们可以使用sysctl命令将swappiness设置为不同的值
例如,要将swappiness设置为20,我们可以输入:
$ sudo sysctl vm.swappiness = 20
vm.swappiness = 20
要使设置在重启系统后仍然生效,建议把自定义设置保存到 /etc/sysctl.d 目录下
$ sudo vi /etc/sysctl.d/98-swap.conf
vm.swappiness = 20
调整 Cache Pressure 缓存压力设置
您可能想要修改的另一个相关值是 vfs_cache_pressure。此设置配置系统将选择多少缓存inode和dentry信息而不是其他数据
基本上,这是关于文件系统的访问数据。这通常是非常昂贵的查询和非常频繁的请求,所以这是你的系统缓存的一个很好的事情。您可以通过再次查询proc文件系统来查看当前值:
$ cat /proc/sys/vm/vfs_cache_pressure
100
由于它当前已配置,我们的系统会过快地从缓存中删除inode信息。我们可以通过键入以下内容将其设置为更保守的设置(如50):
$ sudo sysctl vm.vfs_cache_pressure = 50
vm.vfs_cache_pressure = 50
同样,我们要把这个设置保存到 /etc/sysctl.d/98-swap.conf 文件中:
$ sudo vi /etc/sysctl.d/98-swap.conf
vm.vfs_cache_pressure = 50
我们把自定义内核参数设置都保存到 /etc/sysctl.d/
目录下,并且文件名以 98 开头,当我们创建一个新的 VPS 时,可以轻松地用 tar
命令把 /etc/sysctl.d/98*
文件打包并迁移到新的环境中。你可以在下面地址查看内核参数优化文件:
https://github.com/softwaredownload/openwrt-fanqiang/tree/master/ubuntu/etc/sysctl.d
相关资源:
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/ubuntu/etc/sysctl.d/98-swap.conf
- https://software-download.name/2014/fanqiang-jiaocheng/
- https://xwvut.software-download.name/
附录
科学上网常用资源及如何贡献本项目
最简单的路由器刷OpenWrt科学上网方案:
在线阅读OpenWrt路由器科学上网、科学上网器教程:
- https://xwvut.software-download.name
- https://github.com/softwaredownload/openwrt-fanqiang/blob/master/SUMMARY.md
本地阅读本教程的方法
git clone项目
cd ~/Downloads
git clone https://github.com/softwaredownload/openwrt-fanqiang
下载Markdwon阅读软件 Typora
Typora有个神奇的地方,就是 Markedown 写作和预览是一体的这就避免了多数 Markdown 写作软件会有的尴尬:边写作边预览时,屏幕宽度始终不够
下载后,点击菜单 File
选择 Open Folder...
选择 fanqiang/ebook
点击左边的导航栏切换内容
你是个有爱心的人,阅读了本教程,想要回馈这个开源项目,在阅读时顺便修改一些错字,加进补充内容,增加一章你的路由器应用本教程科学上网的过程等等,然后提交 pull request
相关资源:
- https://software-download.name/2014/fanqiang-jiaocheng/
- https://typora.io
- https://xwvut.software-download.name/
知识若不分享,实在没有意义
这个世界为什么圣人这么少?
人类历史上存在过无数人,他们都不见了,他们都到哪里去了,他们曾有过什么样的故事,可曾有人在想起他们的笑容?通过历史书,我们知道了历史上存在过的一些人物的名字,其中少数人,为人类的发展作出了特别的贡献,我们可以称他们为圣人,这样的人,一只手就数得过来
历史上存在过的人这么多,为什么圣人却这么少?
我认为,这是因为,普通人的一生,主要是在思考怎么得到更多,而较少想到去付出。得到越多越好,付出越少越好,这就是普通人
圣人是怎么样的,是不是只想着付出,不计收获?不是的,我认为圣人是付出得到比较均衡的人。只付出而不得到,自己就很快会陷入困境,就没有能力去帮助更多人
圣人得到什么,就会想着怎么样去回馈外界,回馈社会,在回馈过程中自己得到快速成长,从而有更大的能力去回馈更多,圣人于是逐渐长成
我这么说,并不是希望谁成为圣人。圣人并不知道自己是圣人,也不会去想这个事情。有一个信念,就要去实行,生命的意义就在于点滴的行动,能做多少就做多少,当生命之花最终凋落时,我们得到的都将失去,我们付出的也许还会存在于这个世界很长的时间
我为什么写这个教程
生在天朝,上网各种不方便,很是苦恼,什么OpenWrt,没有听说过,不知道哇。上网查相关论坛,非注册用户附件下载隐藏,图片隐藏,各种限制。也有一些教程散布在网上,需要自己整合。终于,花了N个白天,给家里的路由器科学上网了。我是个习惯于换位思考的人,想想自己花了很多时间查各种资料,何不花时间整合各种资源并加上自己的心得,写成系列教程,公布在网上?
于是,又是N个白天(N > 10),学习Git, GitHub, GitBook, Ubuntu, Markdown, OpenWrt,各种调试、编译。经常一天的绝大部分时间在写这个教程。钱可以少赚些,当下够用就行,这个教程还得认真写,没有想过要得到什么,只是觉得白发已生,人生不能虚度,给这个世界留下一些自己的印记也总是好的。虽然不对别人说,但也未尝不可在人少时偷偷笑一声,并对自己说:我这样的好人,在这个世界上可是不多呢,哈哈
为什么以开源方式发布在GitHub
为什么不写在博客上呢?如果写在博客上,就要自己维护博客,一直维护下去总是个麻烦事。GitHub总比自己维护的博客稳定,或者说能存在更长时间。即使GitHub倒闭,也就一个git命令就可以托管到其他网站,何况GitHub至少现在看来是来日方长呢
开源方式发布,更是希望阅读本教程科学上网成功的朋友,如果你的路由器型号不被本教程覆盖,就写下自己的科学上网实践过程,提交到本项目中,以帮助相关朋友。我在教程中以 D-Link DIR-505为范例,演示了如何参与到本项目中来,将在下一节详述
相关资源:
如何贡献本项目
虽然说原理是通用的,本教程内容可以应用到绝大多数路由器中去。然而,高手毕竟少数,多数有科学上网需求的人可能都没有用过Linux系统,没有听说过OpenWrt,针对他们,最好是一种路由器类型(型号)一个教程。并且最好提供预编译的固件,刷上这个预编译的固件后,修改极少的参数就可以自动科学上网
在你应用本教程原理科学上网的过程中,把详细应用过程一步步写下来,并贡献到本项目中,以帮助更多的人
假如你的路由器是 netgear wndr3800
如何通过 Github 贡献本项目:
先阅读 Github 贡献向导,然后:
- Fork 本项目 ( https://github.com/softwaredownload/openwrt-fanqiang/fork )
- 创建你的分支 (git checkout -b my-new-feature)
- 提交你的改进 (git commit -am 'Add some feature')
- Push到你的分支 (git push origin my-new-feature)
- 到github.com 创建 Pull Request
如何为新的路由器创建科学上网教程:
cd openwrt-fanqiang
mkdir -p ebook/wndr3800/images
mkdir openwrt/wndr3800
在ebook目录下创建以路由器型号为名的目录,以wndr3800为例,教程在ebook/wndr3800目录下,图片在wndr3800/images在目录下
wndr3800专用的配置文件在openwrt/wndr3800下,注意,openwrt/default目录已经有的配置文件可以省略
路径、文件名都小写,因Windows系统是大小写不敏感的
在你的教程中最好提供预编译固件的稳定下载地址。如果你没有稳定的下载空间,可以提交一个issue,附上临时下载地址,我会上传到稳定下载地址,然后你可以修改教程加上稳定下载地址。注意教程目录下不要直接包含固件文件,大的二进制文件不需要用git跟踪
你可以用LiteIDE写教程
修改目录文件, openwrt/SUMMARY.md,把你的教程作为新的一章,放在最后一章之前
如果你的路由器型号与教程中的相同或类似,你也可以参与到本项目中来,你可以修正错误,补充不详细的地方,文字润色,提出建议等
相关资源: