Raspberry Pi技术笔记之五:打造家用翻墙网关

先前一直是hack路由器的方式来翻墙,方案是ddwrt加pptp,用了有差不多二年时间。稳定性是没有问题,只是前段时间入手天猫魔盒后在电视上看YouTube总是没法流畅播放,按理说家里20M的带宽是不会有问题。经过电脑直接挂VPN和路由器挂VPN对比测速之后,发现后者的带宽几乎只能达到前者一半,基本上确定是路由器性能问题了。于是开始考虑用Raspberry Pi来当翻墙网关,测试下来的结果是挂VPN后带宽完全没有损失,也就是说至少性能上是没有问题的。

下文介绍的方案中VPN服务端为Cisco IPsec VPN,客户端使用vpnc,另外用dnsmasq来将指定域名路由至OpenDNS来解析以对抗DNS劫持问题。Raspberry Pi所安装系统为Archlinux。

  1. 安装systemd和vpnc
    pacman -Sy systemd vpnc
  2. 修改vpnc配置文件/etc/vpnc/default.conf,需要配置的主要条目如下:
    # vpn server
    IPSec gateway $vpnurl.com  ## 替换为vpn服务器网域或者IP
    IPSec ID $vpn  ## 替换为groupname
    IPSec secret $vpn.psk  ## 替换为psk字符串
    Xauth username $yourvpnusername  ## 替换为用户名
    Xauth password $yourvpnpasswd  ## 替换为密码

    配置完成后,使用vpnc命令即可测试是否能够成功连接,如下则为成功案例:

    vpnc
    VPNC started in background (pid: 31049)...
  3. 下载vpnc的监控脚本ipsecmonitor.sh和路由分离脚本vpnup.sh,路由分离脚本的作用是将国内外IP的路由分离开来,即所有中国以外地区IP才走VPN通道,国内IP则不走VPN通道,这样可以在翻墙的同时保证国内网站的访问速度
    cd /etc/vpnc/
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/vpnc/ipsecmonitor.sh
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/vpnc/vpnup.sh
    chmod +x *sh
  4. 下载vpnc及监控脚本的service文件,并添加至开机自动启动
    说明:route-forward.service用来开启系统内核的路由转发功能及调整MTU大小
    说明:此方案中vpnc进程并没有添加至开机自动启动,而是待系统启动后由监控进程来拉启

    cd /etc/systemd/system/
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/system/vpnc.service
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/system/vpnc-monitor.service
    wget https://github.com/bostoneboy/raspberry_pi_stuff/blob/master/system/route-forward.service
    systemctl enable vpnc-monitor.service
    systemctl enable route-forward.service
  5. 安装 dnsmasq
    pacman -Sy dnsmasq
  6. 修改dnsmasq配置文件,示例如下,address用于指定主机名或域名对应的IP地址,server用于指定域名对应的解析服务器,示例中将被『污染』的域名指定到OpenDNS上来解析,配置文件以外的所有域名则按缺省走本地ISP的解析服务器
    vi /etc/dnsmasq.conf
    address=/pi/192.168.168.2
    address=/ipad/192.168.168.4
    address=/tmall/192.168.168.5
    address=/ddwrt/192.168.168.1
    server=/google.com/208.67.222.222
    server=/googlevideo.com/208.67.222.222
    server=/youtube.com/208.67.222.222
    server=/blogspot.com/208.67.222.222
    ... ...
  7. 下载dnsmasq的service文件,及添加至开机自动启动
    cd /etc/systemd/system/
    wget https://github.com/bostoneboy/raspberry_pi_stuff/raw/master/system/dnsmasq.service
    systemctl enable dnsmasq.service

重启系统,测试成功,将连网设备的DNS和网关地址修改为Raspberry Pi的IP地址即开始幸福的无墙网络生活。