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
相关资源: