最近貌似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.d
containing 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.