Shadowrocket Rules

style-notepad len:562 crease:27% color:0 rot:1

1. Install Cloudflare DoH Profile

Ensure you are using DNS over HTTPS (DoH).

Download cloudflare-doh.mobileconfig , keep the .mobileconfig extension, open to install, and follow the on screen instructions. Works for both macOS and iOS.

2. Shadowrocket Rules

Open Shadowrocket, switch to the Config menu and scan the QR code.

Rules to use when in CN

  • Block Ads
  • Skip CN traffic
  • Proxy all other traffic

Rules to use when in CH

  • Block Ads
  • Skip CH, CDNs & top sites
  • Skip sites triggering reCAPTCHA or proxy bans
  • Proxy all other traffic

See also VPS Configuration .

Shadowrocket Rules

style-notepad len:562 crease:27% color:0 rot:1
Aug 9, 2020

1. Install Cloudflare DoH Profile

Ensure you are using DNS over HTTPS (DoH).

Download cloudflare-doh.mobileconfig , keep the .mobileconfig extension, open to install, and follow the on screen instructions. Works for both macOS and iOS.

2. Shadowrocket Rules

Open Shadowrocket, switch to the Config menu and scan the QR code.

Rules to use when in CN

  • Block Ads
  • Skip CN traffic
  • Proxy all other traffic

Rules to use when in CH

  • Block Ads
  • Skip CH, CDNs & top sites
  • Skip sites triggering reCAPTCHA or proxy bans
  • Proxy all other traffic

See also VPS Configuration .

Connect to your corp VPN with vpnc

style-newspaper len:3239 crease:71% color:4 rot:3

Vpnc 是一个开源的 VPN 客户端,可以用来连接 Cisco VPN 网关,在 VPS 上使用 vpnc 连接办公网络,可以实现在一个严格限制端口的办公网络里管理 VPS。我的 VPS 是 vpsvillage 的 32-bit Debian 系统,最近折腾了一通,笔记记录如下。

Step 1. 首先要保证系统装有 tun 模块,不巧的是,我的 VPS 上的 kernel 模块全是 64-bit 的版本,这个应该是操作系统安装脚本的问题,联系客服后得知他们提供有 32-bit 的 kernel module 包,并且有个脚本帮助完成安装。

wget ftp://ftp.grokthis.net/pub/linux/modules/install_modules.sh
mv /lib/modules/`uname -r` /lib/modules/`uname -r`.orig
sh install_modules.sh
depmod -a
modprobe tun

Step 2. 安装 vpnc

apt-get install vpnc

Step 3. 导出 VPN 网关的配置文件

公司机器都是 windows 已经装有 Cisco VPN Client,通常在 C:\Program Files\公司 \VPN Client\profiles 里面就能找到配置文件。vpnc 带有一个工具可以将 pcf 配置文件直接转换为 vpnc 的配置文件,工具默认安装在 /usr/share/vpnc/pcf2vpnc,是个 perl 脚本,依赖 LWP::Simple 模块,我的 VPS 上没有这个,perl -MCPAN -e ‘install LWP::Simple’ 等了很久也没完成,放弃。其实可直接根据 pcf 文件里面的内容,参考 /etc/vpnc/example.conf 写一个配置文件,只要 ——

Step 4. 解码配置文件中的 enc_GroupPwd

vpnc主页提供了个工具 cisco-decode 直接到那解码即可。

Step 5. 默认情况 vpnc 建立了 vpn 隧道之后会把默认网关和 /etc/resolv.conf 修改掉,如果这时候你在外网 ssh 在鼓捣这个,那 ssh 连接就会断了并且再也连不上,要用到两个配置:Target networksDNSUpdate。完整的 vpnc 配置文件示例:

IPSec gateway 12.34.56.78
IPSec ID groupName
IPSec secret groupPassword
Xauth username myUsername
Xauth password myPassword
Target networks 10.0.0.0/8 192.168.0.0/16
DNSUpdate no

Step 6. vpnc 需要 root 权限,即使把它 chmod u+s 也没有用,因为它使用的一个库 libgcrypt 会在 init 的时候放弃 euid root 权限,导致不能对 tun0 设备进行 ioctl。

Step 7. 在严格限制端口的办公网络内部,在 VPS 上放一个 cgi 程序来建立 VPN 隧道即可穿透端口限制,但是通常 web 服务都是普通用户(如 www-data, nobody)运行,要调用 vpnc,需要写个 wrapper

/* VPNC.c */
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    /* gcry_control from libgcrypt drops root euid privilege in vpnc.c */
    setuid(0);
    return execve("/usr/sbin/vpnc", argv, NULL);
}

然后

gcc -o VPNC VPNC.c
cp VPNC /usr/sbin/
chown root:www-data /usr/sbin/VPNC
chmod 4710 /usr/sbin/VPNC

在 cgi 程序中调用 VPNC 才能拥有 root 权限。vpnc-disconnect 也是一样。(VPN.c , VPNC-disconnect.c )

Step 8. cgi 程序的写法就各显神通了,我的 cgi 程序 是 bash 脚本,可以 URL/vpnc/q 查询 IP,URL/vpnc/<key> 建立连接,URL/vpnc/d 断开连接,相关的 lighttpd 配置(适应任何脚本):

$HTTP["url"] =~ "^/cgi-bin/.*" {
    cgi.assign = ( "" => "" )
}

参考资料:vpnc-howto.xml

Connect to your corp VPN with vpnc

style-newspaper len:3239 crease:71% color:4 rot:3
May 13, 2009

Vpnc 是一个开源的 VPN 客户端,可以用来连接 Cisco VPN 网关,在 VPS 上使用 vpnc 连接办公网络,可以实现在一个严格限制端口的办公网络里管理 VPS。我的 VPS 是 vpsvillage 的 32-bit Debian 系统,最近折腾了一通,笔记记录如下。

Step 1. 首先要保证系统装有 tun 模块,不巧的是,我的 VPS 上的 kernel 模块全是 64-bit 的版本,这个应该是操作系统安装脚本的问题,联系客服后得知他们提供有 32-bit 的 kernel module 包,并且有个脚本帮助完成安装。

wget ftp://ftp.grokthis.net/pub/linux/modules/install_modules.sh
mv /lib/modules/`uname -r` /lib/modules/`uname -r`.orig
sh install_modules.sh
depmod -a
modprobe tun

Step 2. 安装 vpnc

apt-get install vpnc

Step 3. 导出 VPN 网关的配置文件

公司机器都是 windows 已经装有 Cisco VPN Client,通常在 C:\Program Files\公司 \VPN Client\profiles 里面就能找到配置文件。vpnc 带有一个工具可以将 pcf 配置文件直接转换为 vpnc 的配置文件,工具默认安装在 /usr/share/vpnc/pcf2vpnc,是个 perl 脚本,依赖 LWP::Simple 模块,我的 VPS 上没有这个,perl -MCPAN -e ‘install LWP::Simple’ 等了很久也没完成,放弃。其实可直接根据 pcf 文件里面的内容,参考 /etc/vpnc/example.conf 写一个配置文件,只要 ——

Step 4. 解码配置文件中的 enc_GroupPwd

vpnc主页提供了个工具 cisco-decode 直接到那解码即可。

Step 5. 默认情况 vpnc 建立了 vpn 隧道之后会把默认网关和 /etc/resolv.conf 修改掉,如果这时候你在外网 ssh 在鼓捣这个,那 ssh 连接就会断了并且再也连不上,要用到两个配置:Target networksDNSUpdate。完整的 vpnc 配置文件示例:

IPSec gateway 12.34.56.78
IPSec ID groupName
IPSec secret groupPassword
Xauth username myUsername
Xauth password myPassword
Target networks 10.0.0.0/8 192.168.0.0/16
DNSUpdate no

Step 6. vpnc 需要 root 权限,即使把它 chmod u+s 也没有用,因为它使用的一个库 libgcrypt 会在 init 的时候放弃 euid root 权限,导致不能对 tun0 设备进行 ioctl。

Step 7. 在严格限制端口的办公网络内部,在 VPS 上放一个 cgi 程序来建立 VPN 隧道即可穿透端口限制,但是通常 web 服务都是普通用户(如 www-data, nobody)运行,要调用 vpnc,需要写个 wrapper

/* VPNC.c */
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    /* gcry_control from libgcrypt drops root euid privilege in vpnc.c */
    setuid(0);
    return execve("/usr/sbin/vpnc", argv, NULL);
}

然后

gcc -o VPNC VPNC.c
cp VPNC /usr/sbin/
chown root:www-data /usr/sbin/VPNC
chmod 4710 /usr/sbin/VPNC

在 cgi 程序中调用 VPNC 才能拥有 root 权限。vpnc-disconnect 也是一样。(VPN.c , VPNC-disconnect.c )

Step 8. cgi 程序的写法就各显神通了,我的 cgi 程序 是 bash 脚本,可以 URL/vpnc/q 查询 IP,URL/vpnc/<key> 建立连接,URL/vpnc/d 断开连接,相关的 lighttpd 配置(适应任何脚本):

$HTTP["url"] =~ "^/cgi-bin/.*" {
    cgi.assign = ( "" => "" )
}

参考资料:vpnc-howto.xml