Posts tagged vpn

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地址即开始幸福的无墙网络生活。

家庭级无墙网络方案

有没有想过将翻墙这一行为在路由器端完成,这样一来下游的所有接入设备就自然处于无墙的网络环境了,答案是肯定的,本文作为抛砖引玉来浅层次探讨,技术细节不在讨论范围之内。

目前最成熟和稳定的翻墙方法是VPN,但市面上的路由器几乎都不提供VPN的连接功能,好在有一个叫做DD-WRT的第三方路由器固件,我们可以通过刷机的方法来将自己的路由器固件升级为DD-WRT,以获得包括VPN连接在内的多种客制化功能。以实用性为出发点,基于VPN的无墙网络方案有两种:

DD-WRT是一个基于linux的开源路由器固件,提供VPN,OpenVPN,无线中继,QoS流量控制,甚至增大发射功率等等功能。并且你可以telnet或是ssh登陆DD-WRT,执行各种命令或是hack。包括TP-Link, D-Link, Buffalo, Cisco Linksys在内的不少路由器已经支持刷DD-WRT固件,这里是详细的设备支持列表

第一种方案属于技术型,需要自己手动给路由器升级固件,配置autoddvpn:

技术架构:VPN + DD-WRT + autoddvpn

将路由器升级至DD-WRT固件以支持VPN连接功能后,即实现了全局VPN上网,但全局VPN有个问题:一旦连上VPN,下游设备的所有流量都会路由到VPN线路上,也就是上国内的网站也需要到美国(以美国为例,严格来说是VPN所在地)去绕一圈,浪费VPN流量事小,还会影响到上国内网站的速度,解决这个恼人问题的项目叫做autoddvpn,你需要做的仅仅是在浏览器上登陆路由器的管理页面,在防火墙的页面上添加一行命令,然后保存。autoddvpn 的原理是,按IP地址的物理属性进行路由,即所有中国大陆的IP地址直接走本地网关,其余的则全部走VPN通道。

资金投入:支持DD-WRT的家用(无线)路由器,200元左右;VPN,目前的市价约为150元每年。

第二种方案属于懒人型,你只需要掏钱而已:

国内已经有团队将整套翻墙方案集成到家用路由器里面,提供一条龙的完美无墙网络,做这个事情的是威众安全路由器。你只需要购买他们的路由器,然后以年为单位支付服务费用,其余所有问题都不用你操作和担心。值得推荐的是,威众安全路由器除适合家庭环境外,也相当适合咖啡馆或是小型公司。

资金投入:官方公布的标准版价格是360元每台,包括一年的服务费用。

如何下载Android Market上未对中国开放的应用

capture-market

对于Android用户来说,官方的Android Market(下文昵称为菜市场)无疑是获取应用的最佳途径,无论从数量、质量和安全性来说都最有保障的。但由于各种已知和未知因素,目前为止Google仍然没有对中国大陆用户开放付费应用的下载,另外部分免费应用也因为地域关系未对我们开放。下面将介绍如何绕过限制来自由下载菜市场上的任何应用程序。

一般情况下,官方的菜市场是通过手机网络的运营商代码来识别你的地域,但当你的手机没有注册任何运营商网络时(场景:飞行模式,开启WIFI连接),Google则会通过IP地址来识别你的地域。根据以上原理找到的两种破解方法如下,前提是要拥有美国的VPN帐号或者是手机拥有root权限。

其一:拥有美国VPN。操作方法为:将手机切至“飞行模式”,开启WIFI连接,启动VPN连接。当VPN连接正常后,打开菜市场就会出现付费应用了。

其二:拥有root权限。操作方法为:在菜市场上搜索并安装“MarketEnabler”这个应用,安装完毕并开启此应用,在“Settings list”下面的“[us]T-Mobile(T-Mobile)”上长按,跳出菜单中选择“fake this provider now”,完成后重新开启菜市场,你会激动的发现也有付费应用了,以前找不到的免费应用也可以找到了。

说明:本文中的方法二以伪装美国运营商T-Mobile为例,你也可以选择除中国外的其它运营商,效果基本相同。

MarketEnabler”这个应用除了伪装成“Settings list”标签中给出的运营商外,也可以在“Set custom”这个标签下自己填入运营商代码,来伪装成全球任何一个移动运营商网络。应用场景之一是:运营商代码设为台湾中华电信的46692,下载KKBOX应用(假设此应用只限于台湾用户)。