一、源码下载地址
https://gitee.com/ksc/raspi_router
二、开发文档
使用方法
你可以 用git检出一份
apt-get install git
git clone http://git.oschina.net/ksc/raspi_router
或者直接下载zip压缩包
wget http://git.oschina.net/ksc/raspr ... /archive?ref=master -O t.zip
使用加密线路(vpn)访问特定网站时,无需来回切换网络,会更方便。
前提 能有正常上网的环境 即pi插上网线后就能上网(如何上网不在此文讨论范围)
我这里用的是openvpn,如果你有国外vps 如何配置请查看 OpenVPN安装配置教程
- 树莓派一个 (B型的带有线网卡)
- USB无线网卡一个( 我的是在京东上买的 二十块钱左右)
- vpn账户一个,并且能正常连通上网
在这里我只简单说下客户端的配置
开始配置ifconfig eth0 Link encap:Ethernet HWaddr b8:27:eb:3c:2b:11 inet addr:192.168.2.11 Bcast:255.255.255.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:47072 errors:0 dropped:0 overruns:0 frame:0 TX packets:48828 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:29137358 (27.7 MiB) TX bytes:9871271 (9.4 MiB)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:693 errors:0 dropped:0 overruns:0 frame:0 TX packets:693 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:121328 (118.4 KiB) TX bytes:121328 (118.4 KiB)wlan0 Link encap:Ethernet HWaddr c8:3a:35:c1:29:ab inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:29999 errors:0 dropped:0 overruns:0 frame:0 TX packets:27439 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3228721 (3.0 MiB) TX bytes:27597707 (26.3 MiB) eth0是我的有线网卡 已经获自动获取了ip(我现在就是通过有线ssh控制pi的)
wlan0就是那个无线网卡了(一般情况下是wlan0,若没有的话,你可以输入lsusb,看一下有没有显示出 你的无线网卡设备 。没有的就是驱动问题。)
修改 网络配置文件 给wlan0设置固定ip 在这里我设置的是192.168.10.1
注意一定不要和eth0在同一个网段
另外若你启用了wicd等网络管理服务请关闭
root@coolpi:~# cat /etc/network/interfacesauto loiface lo inet loopbackiface eth0 inet dhcp#allow-hotplug wlan0#iface wlan0 inet manual#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf#iface default inet dhcpiface wlan0 inet staticaddress 192.168.10.1netmask 255.255.255.0 1 vpn客户端配置 安装openvpn,这里我们只是用它的客户端功能(如何配置,看上面的连接)
apt-get install openvpn 下面是我的配置文件
clientdev tun #要与前面server.conf中的配置一致。proto udp #要与前面server.conf中的配置一致。remote chicago.vps 8080 #将服务器IP替换为你的服务器IP,端口与前面的server.conf中配置一致。resolv-retry infinitenobindpersist-keypersist-tunca ca.crtcert client.crtkey client.keyns-cert-type server#是否作为网关出口,会影响路由表的默认出口;redirect-gatewaykeepalive 20 60#tls-auth ta.key 1comp-lzoverb 3mute 20route-method exeroute-delay 2 需要注意的是
ca ca.crtcert client.crtkey client.key 这几个证书文件最好写成得路径,否则执行命令
openvpn /etc/openvpn/client.conf 会提示找不到这几个文件
只有cd /etc/openvpn/ 然后 openvpn client.conf 才行
若配置的没有有问题的话 输入ifconfig 会多出来一个虚拟网络设备tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.2.2.10 P-t-P:10.2.2.9 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:22212 errors:0 dropped:0 overruns:0 frame:0 TX packets:18882 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:26477654 (25.2 MiB) TX bytes:1607636 (1.5 MiB) 记住这两个地址 inet addr:10.2.2.10 P-t-P:10.2.2.9 待会要用到
2 安装路由软件 下一步就是安装两个软件hostapd isc-dhcp-server
1) AP热点 hostapd 服务#安装apt-get install hostapd#编辑默认配置文件路径vi /etc/default/hostapd将#DAEMON_CONF= ""这一行修改为DAEMON_CONF="/etc/hostapd/hostapd.conf"#解压默认配置文件zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz >/etc/hostapd/hostapd.conf#修改默认配置文件 vi /etc/hostapd/hostapd.conf 刚开始的时候可以不加密直接使用默认配置就行 只需要修改下 ssid 和channel
注意: 默认是不加密的连接,建议等你完全测试成功了再修改为wpa加密的(配置文件中有各种模版)
ssid= test_ap #搜索无线信号时看到的那个channel = 11 #此值最好不要与其他无线路由器重复。但是我试了一下别的信道 13、12等 hostapd 提示错误 貌似是网卡不支持 2) ip地址自动分配 dhcpd服务#安装apt-get install isc-dhcp-server#将一下配置添加进 /etc/dhcp/dhcpd.conf subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.10 192.168.10.100; #分配给客户端的ip范围 option routers 192.168.10.1;#网关地址 option broadcast-address 192.168.10.255; #广播地址 注意和上面的子网掩码255.255.255.0 对应 option domain-name-servers 8.8.8.8,8.8.4.4; #DNS服务器地址 default-lease-time 600; #租约时间 到期后客户端需要重新发起请求获取ip地址(可以续约原来的ip) max-lease-time 7200;} 注意:
(还有一种解决办法就是修改hosts,但是这个太麻烦,国外大网站不止一个域名,ip地址也是多个,收集这些信息也挺麻烦,相对来说收集国外网站ip段来说还是容易的)
- 配置文件中的网段,子网掩码,以及网关要和给wlan0设置的静态ip【相对应】wlan0就是这个网段的网关)
- dns目前最好是配置成google的dns。因为国内的在根上都被污染了, google的dns走vpn的话没问题不会被污染,相应的解析速度也会变慢
3) 全部配置完毕后 ,启动服务ifup wlan0 #启用网卡service hostapd start or
hostapd -ddK /etc/hostapd.conf #方便查看调试信息
service isc-dhcp-server start #注意在这一步的时候一定要确保wlan0已经启用并配置好了ip地址 不然会dhcpd会报错 4. 连接测试 现在你拿出手机搜索一下无线信号 有没有 [test_ap] 然后连接上试试。
若能成功连接并且获取ip,则表明你的pi无线路由器了
但是现在你得到手机还不能上网
需要设置一下 NAT转发 ,即把wlan0上的网络连接转发到eth0上面通过有线来上网
3. 路由转发 ———-分割线下面这些 觉得麻烦的可以不看,我在后面提供了一个脚本 不过最好还是看一下,有助于理解————-
- 1)
将192.168.10.0/24 这个网段的流量转发到 eth0上
注意:192.168.2.11 是eth0的ip
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 192.168.2.11
目前位置,手机连上无线后应该就能上网了,但访问国外网站还是不行的
- 2)
iptables -t nat -F #先把上面那条规则删除了
下面事例中我用8.8.8.8 代指国外ip ,你可以任意修改成 “任意国外ip地址”
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 --dst 1.1.1.1 -j SNAT --to-source 10.2.2.10 3)
注意:目前默认的网关仍然是eth0 192.168.2.1
看一下下面的路由表 默认是从 192.168.2.1出去的root@coolpi:~/raspi_router# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacedefault 192.168.2.1 0.0.0.0 UG 0 0 0 eth0.2.2.0 10.2.2.9 255.255.255.0 UG 0 0 0 tun0.2.2.9 * 255.255.255.255 UH 0 0 0 tun0.168.2.0 * 255.255.255.0 U 0 0 0 eth0.168.10.0 * 255.255.255.0 U 0 0 0 wlan0 所以我们要添加一个路由项 (10.2.2.9 就是上面tun0 p-t-p 那一项,我的理解就是vpn的虚拟网关)。
把去往8.8.8.8的流量路由到vpn上面去,不走原来的路线了
route add -net 8.8.8.8/32 gw 10.2.2.9 dev tun0root@coolpi:~/raspi_route# traceroute 8.8.8.8traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 10.2.2.1 (10.2.2.1) 306.001 ms 308.014 ms 308.195 ms 省略…… 用traceroute命令可以看到 现在走的是vpn
若你只设置8.8.8.8的路由而不设置该ip的NAT转发,在pi上没有什么问题,会按照你的设置自动选择线路
但是无线网络下面的终端(手机等)还是只能访问国内的ip地址 你设置的“国外ip”将不能访问(假如原来能访问的话hehe)
总的来说 路由规则,NAT转发缺一不可
route add -net 8.8.8.8/32 gw 10.2.2.9 dev tun0iptables -t nat -A POSTROUTING -s 192.168.10.0/24 --dst 8.8.8.8 -j SNAT --to-source 10.2.2.10

4)
现在国外的网站能访问了,我们再把第一步在重复一遍 设置默认转发规则
*注意:这一步一定要放到最后执行 * iptables规则就像一个筛子 第一层被挡住以后就不会往下走了iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 192.168.2.11 —————————–结束——————————–
我写了个脚本,python写的(shell不是很熟悉)
check.pybuild_sh.py #根据route.txt 生成 添加路由表和 iptables NAT转发命令route.txt #国外的ip网段,不是很全 可以把一些网段自动转换称shell脚本 已经传到了 git@osc 上面
你可以 用git检出一份
apt-get install gitgit clone http://git.oschina.net/ksc/raspi_router 或者直接下载zip压缩包
wget http://git.oschina.net/ksc/raspi ... /archive?ref=master -O t.zipunzip t.zipcd raspi_router/ check.py 检查你前几步的设置是否有效
若你用的是openvpn 一般不需要修改,直接运行即可
root@coolpi:~/raspi_route# ./check.pyeth0 oketh0_ip=192.168.2.11wlan0 okwlan0_ip=192.168.10.1/24tun0 oktun0_ip=10.2.2.10p-t-p:10.2.2.9检查通过 请运行一下命令生成 路由及转发脚本./build_sh.py 安照提示运行上述命令
root@coolpi:~/raspi_route# ./build_sh.py /root/raspi_route/route.txtlinux_route.sh 及 linux_nat.sh 已经生成 请运行 然后执行
./linux_route.sh && ./linux_nat.sh 以后若ip信息都没有变化的话 ,直接运行如下命令即可
ifup wlan0 #若wlan0已经启用并获取ip地址了、则不用执行此命令service hostapd startservice isc-dhcp-server startopenvpn client.conf #具体看你的配置文件而定./linux_route.sh ./linux_nat.sh 最后
- route表是我从网上搜集的,只有几个常用的网段,不是很全。
- 上述过程我检查了几遍,但难免有疏漏的地方。若您发现请指正
虽然树莓派很小,但与普通电脑无异。
大多数电脑能做的事都可以在树莓派上做,树莓派非常适合许在普通电脑上做的事情,因为它的能耗低,移动便携,gpio等特性。下面是一些有趣的树莓派:
普通难度的DIY
用树莓派打造一个家庭影院
把树莓派配置成无线路由器
用树莓派搭建BT下载服务器
拿树莓派当FTP文件服务器
在树莓派上搭建代码托管服务(SVN)
用树莓派当网络收音机播放FM电台
在树莓派上搭建LNMP环境,作为网站服务器
基于 Samba 实现 NAS 系统(网络存储中心)
用树莓派实现网络批量自动安装CentOS
用树莓派建立家庭媒体中心
在树莓派上搭建LAMP服务
在树莓派上获取美国天气预报
使用Markdown On Raspberry Pi 写博客
树莓派制作单双休闹钟
用树莓派搭建Git私有服务器
用树莓派做VPN路由网关
树莓派上使用迅雷远程下载
树莓派做下载机,Aria2!
树莓派下搭建shadowsocks服务器
空气指数之 PM2.5 显示器(基于SAKS扩展板)
站点宕机指示(基于SAKS扩展板)
数字温度计(基于SAKS扩展板)
较高难度的DIY
给树莓派安装摄像头模块实现拍照、摄像功能
在树莓派上实现文字转语音服务
树莓派使用MJPG-Streamer实现网络监控
树莓派+温度传感器实现室内温度监控
用树莓派实现网站访客LED闪亮提醒
树莓派用作FM电台发射器
用树莓派改装的智能微博炉
树莓派打造超低成本廉价盲文显示器
用树莓派打造一个带WIFI的数码照相机
用树莓派做个专属iBeacon基站
树莓派搭建 hadoop 集群
将树莓派打造成音乐播放服务器
红外感应模块+蜂鸣器实现简易报警
树莓派DIY自带特效的智能安全门
使用树莓派进行简易人脸识别
直播续章:用树莓派搭建B站直播“点歌台”
叮当:一个开源的树莓派中文智能音箱项目/a>
使用叮当声控智米电风扇
用树莓派DIY六足行走的机器人
家具变智能:用HomeKit+Siri声控家里电器
用树莓派DIY共享鱼缸,支持微信远程喂鱼
用树莓派做 RTMP 流直播服务器,可推送至斗鱼直播