通过Raspberry Pi实现无障碍上网

最近貌似google的服务实在不给力,搜索一直都无法打开。正好发挥手头树莓派的功能,来实现家庭无障碍上网。

网络环境:树莓派通过无线连接路由器,其他电脑通过树莓派中转,国内网址直接走路由器,被墙网址通过VPN出去。

首先设置树莓派,通过无线上网:

1.无线配置,修改/etc/network/interfaces,下面的SSID,PASSWORD换成你自己的

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.88.10
netmask 255.255.255.0
gateway 192.168.88.1
wpa-ssid "SSID"
wpa-psk "PASSWORD"
wireless-power off

2.安装ppp客户端

sudo apt-get install pptp-linux

3.Next, Create a file in /etc/ppp/peers with arbitrary name and the following contents:
在/etc/ppp/peers目录创建一个文件,其中VPNHOSTNAME,$USERNAME,$PASSWORD换成你自己的帐号密码

pty "pptp $VPNHOSTNAME --nolaunchpppd --debug"
name $USERNAME
password $PASSWORD
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
debug
persist
maxfail 0
defaultroute
replacedefaultroute
usepeerdns

3.测试vpn拨号是否成功

sudo pon 配置文件名

然后ping www.facebook.com看是否通过。

4. 启动内核的IPv4转发

sudo sysctl -w net.ipv4.ip_forward=1
记得同时修改/etc/sysctl.conf保证重启也有效。

5.下载chnroutrs.py,用 chnroutes 生成路由脚本(google chnroutes.py,头条就是)

python chnroutes.py -p linux

会生成ip-down,ip-pre-on等文件。

执行ip-pre-on,会把所有的国内的ip地址段加入路由表。

6.在RPi中启动iptables的NAT转换

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

 

后来验证似乎还需要这几条指令:

iptables -A INPUT -i ppp0 -j ACCEPT
iptables -A OUTPUT -o ppp0 -j ACCEPT
iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
iptables -A POSTROUTING -t nat -o wlan0 -j MASQUERADE

其中wlan0是你的无线网卡的id,如果只有一块网卡,就直接用这个,不需要改了。

 

在你的客户端电脑上把网关改成PI的ip地址,dns改成8.8.8.8或者8.8.4.4,防止国内dns污染。看看是不是可以打开facebook之类的网站了?

不确定的话,你可以ipconfig /flushdns后,tracert不同域名,看看是不是走不同路由出去的。

tracert www.china.com 这个应该是走路由器出去的

tracert www.facebook.com这个应该是走VPN的。

所有网站畅通无阻的出去了,包括google随便什么关键字都不会重置了。

 

后记:俺VPN流量有限制,所以都没有加到自动启动里面,每次登录上去手动启动一下就可以了。如果需要自动启动,可以参考其他文章。如果不想每次都要修改dns和网关,在pi上建一个dhcp服务器,网关,dns都配在里面,自动获得就可以了。

比如下面的方法,让系统自动启动VPN

To start your VPN client on boot, you can follow the instructions onhttp://pptpclient.sourceforge.net/howto-debian.phtml (point 8 or 9, Hand configuration section)

An alternate method to make your VPN client run on boot is to make a script in /etc/init.dcontaining these contents:

#! /bin/sh

case "$1" in
  start)
    pon $/etc/ppp/peers/FILENAME
    echo "PPTP Started"
    ;;
  stop)
    poff $/etc/ppp/peers/FILENAME
    echo "PPTP Stopped."
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Then run:

update-rc.d [filename of script] defaults

To make it run at startup.