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 再调出以使修改生效

调出Git Bash for Windows

上图,Windows 10 下快速调出 Git Bash for Windows

Git Bash for Windows里执行命令

上图,在 Git Bash 命令提示符里输入命令,回车执行。一般的 Linux 脚本,都可以这样在Windows下执行

切换翻墙模式应用场景:

  • 浏览外网,某网打不开或打开很慢

    • 按Windows键,输入关键词,回车,调出 Git Bash
    • 输入 ss-global 回车开始全局翻墙
    • 浏览外网结束,调出 Git Bash
    • 输入 ss-asia 回车,翻墙忽略亚洲IP

相关资源