用树莓派做3G无线路由器
第一篇博客献给我做了很长时间的课程设计,也就是题目所说的3G无线路由器。本次开发所使用的开发平台为树莓派开发板,下面进入正题.....
目标:将树莓派设置成为一个3G无线路由器,通过华为的E261拨号上网。
工具:树莓派开发板,3G无线上网卡E261,无线网卡RT5370,
步骤:
一、转换E261的模式
1、查看连接的USB设备
pi@raspberrypi ~ $ lsusb Bus Device : ID : Standard Microsystems Corp. Bus Device : ID 1d6b: Linux Foundation 2.0 root hub Bus Device : ID :ec00 Standard Microsystems Corp. Bus Device : ID 148f: Ralink Technology, Corp. RT5370 Wireless Adapter Bus Device : ID 1a40: Terminus Technology Inc. -Port HUB Bus Device : ID 058f: Alcor Micro Corp. Flash Drive Bus Device : ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (HSPA modem)
最后一行的ID部分为E261的厂商号与设备号,此时的E261是相当于一个存储设备,必须进行模式转换,使其成为一个Modem设备
2、安装usb_modeswitch
pi@raspberrypi ~ $ sudo aptitude install usb-modeswitch
3、修改配置文件
pi@raspberrypi ~ $ sudo nano /etc/usb_modeswitch.conf
在文件的最后加入以下内容:
########################################################
# Huawei, newer modems DefaultVendor= 0x12d1
DefaultProduct=0x1446 TargetVendor= 0x12d1
TargetProductList="1001,1406,140b,140c,1412,141b,1436,14ac" CheckSuccess=20 MessageContent="55534243123456780000000000000011062000000100000000000000000000"
4、重新插拔E261,再次执行lsusb
pi@raspberrypi ~ $ lsusb Bus Device : ID : Standard Microsystems Corp. Bus Device : ID 1d6b: Linux Foundation 2.0 root hub Bus Device : ID :ec00 Standard Microsystems Corp. Bus Device : ID 148f: Ralink Technology, Corp. RT5370 Wireless Adapter Bus Device : ID 1a40: Terminus Technology Inc. -Port HUB Bus Device : ID 058f: Alcor Micro Corp. Flash Drive Bus Device : ID 12d1: Huawei Technologies Co., Ltd.
此时设备号已变为1436,表示转换成功。
需要说明的是,若使用其他3G网卡,配置文件是不同的,自己Google
二、下载安装ppp、sakis3g和umtskeeper,实现拨号上网
ppp软件包将建立基于点对点协议的守护进程,用于管理你和网络运营商之间的通信。sakis3g是一个用来拨号上网的脚本,它带有可交互的拨号界面,非常方便。umtskeeper是利用sakis3g来进行自动重连3g网络的。也可使用wvdial来拨号上网,
使用命令 aptitude install wvdial 安装,它会同时安装ppp软件包。下面介绍的是前一种方法。
1、安装ppp
pi@raspberrypi ~ $sudo apt-get install ppp
2、为了便于管理,创建文件夹 umtskeeper/ 将umtskeeper、sakis3g都放在这个文件夹里。
创建文件夹umtskeeper,并下载umtskeeper
sudo mkdir umtskeeper
cd umtskeeper
sudo wget "http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz"
sudo tar -xzvf umtskeeper.gz
sudo chmod +x umtskeeper
Sakis3g官网已经挂了,不过还好有其他镜像可以下。
sudo wget "http://downloads.sourceforge.net/project/vim-n4n0/sakis3g.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fvim-n4n0%2Ffiles%2F&ts=1363537696&use_mirror=tene~t" -O sakis3g.tar.gz
sudo tar -xzvf sakis36.tar.gz
sudo chmod +x sakis3g
3、拨号上网
sudo ./sakis3g --interactive "connect"
如下进入交互界面:
(如拨号出现错误,建议重启下树莓派)
输入APN的信息
联通的APN为3gnet,用户名和密码似乎可以随便填,我填的是user和pass
查看连接信息
./sakis3g connect info
断开连接
sudo ./sakis3g --interactive "disconnect"
4、设置开机自动拨号上网
在步骤2中下载了umtskeeper,也可以用它调用sakis3g来联网,命令如下:
sudo ./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM'
USBMODEM='12d1:1436' APN='CUSTOM_APN' CUSTOM_APN='3gnet' APN_USER='user' APN_PASS='pass'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart 8 --nat 'no'
将以上命令写入rc.local
编辑rc.local
pi@raspberrypi ~ $sudo nano /etc/rc.local
将以下内容插入exit0这一行之前
/home/pi/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1436' APN='CUSTOM_APN' CUSTOM_APN='3gnet' APN_USER='user' APN_PASS='pass'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --monthstart --nat 'no'
保存退出,下次便可实现开机启动拨号上网。
三、创建无线AP
1、配置无线网卡为固定ip地址
输入命令
sudo nano /etc/network/interfaces
编辑网络配置文件
找到这几行 注释掉,如下
#allow-hotplug wlan0 #iface wlan0 inet manual #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
添加以下几行
iface wlan0 inet static address 192.168.10.1 netmask 255.255.255.0
这里需要说明的是 192.168.10.1是给raspberry pi 做的路由器分配的网关 ip。这个不能跟局域网里其他路由网关ip重复
2 安装hostapd
Linux 下使用 hostapd 来建立无线 AP 服务
输入命令,安装hostapd
sudo apt-get install hostapd
编辑hostapd 默认配置文件
sudo nano /etc/default/hostapd
找到
#DAEMON_CONF= ""
修改如下
DAEMON_CONF="/etc/hostapd/hostapd.conf"
编辑 hostapd 配置文件
sudo nano /etc/hostapd/hostapd.conf
加入如下内容
# 把无线网卡wlan0 作为接入点 interface=wlan0 # 使用nl80211驱动 driver=nl80211 #共享网络的SSID是RaspberryPi ssid=RaspberryPi # 网卡工作在802.11G模式 hw_mode=g #无线网卡选用11信道 channel=11 # WPA2 配置 wpa=2 #wpa密码是raspberry wpa_passphrase=raspberry #认证方式为WPA-PSK 加密方式为CCMP wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP rsn_pairwise=CCMP beacon_int=100 auth_algs=3 wmm_enabled=1
保存退出
输入命令
sudo service hostapd restart
重新启动hostapd 服务
3.安装dhcp服务
DHCP 服务用于给客户端分配动态 IP
输入命令,安装dhcp服务
sudo apt-get install isc-dhcp-server
备份配置文件
sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
编辑新的配置文件
sudo nano /etc/dhcp/dhcpd.conf
复制粘贴以下内容
default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.10 192.168.10.100; option routers 192.168.10.1; option broadcast-address 192.168.10.127; option domain-name-servers 8.8.8.8,8.8.4.4; default-lease-time 600; max-lease-time 7200; }
保存退出
修改isc-dhcp-server文件
sudo nano /etc/default/isc-dhcp-server
加入DHCP的配置文件路径和用作AP的接口这些参数
DHCPD_CONF="/etc/dhcp/dhcpd.conf"
INTERFACES="wlan0"
重新启动服务
sudo service isc-dhcp-server restart
4.配置路由转发
到上面为止,其实我们已经建立了无线热点了,手机打开WiFi功能可以连上RaspberryPi这个热点,但还不能上网。原因在于无线 AP 并不负责数据交换,也就是通过客户端发送到无线 AP 的数据包还没法发送到其目标主机,自然也不会得任何响应。
Linux 中完成数据包转发的是 iptables,它才是完成路由功能核心所在。
在添加 iptables 转发规则前要先打开内核的 IP 转发功能:
echo "" > /proc/sys/net/ipv4/ip_forward
上面的命令只是临时打开IP转发的功能,下次重启就会失效,要想不失效可以直接修改/etc/sysctl.conf这个系统配置文件
sudo nano /etc/sysctl.conf
找到这里
#net.ipv4.ip_forward=1
将前面的注释符号#去掉
保存退出
输入命令
sudo sysctl -p
让该设置立即生效
下面是关键的部分,设置IP转发规则,
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE sudo iptables -A FORWARD -i ppp0 -o wlan0 -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT
ppp0是3G网卡接口,MASQUERADE表示数据包伪装,路由器内部的数据通过这个接口发送出去或者外部的进来。如果有以太网口的话,将ppp0改为eth0可以在这个以太网口实现转发,也就是实现普通无线路由器的功能。
保存IP转发规则
sudo bash iptables-save > /etc/iptables.up.rules Exit
输入命令
sudo nano /etc/network/if-pre-up.d/iptables
把下面两行复制粘贴到编辑窗口
#!/bin/bash /sbin/iptables-restore < /etc/iptables.up.rules
保存退出
至此,3G路由器的配置工作已全部完成,输入
sudo reboot
重启树莓派,可搜索到RaspberryPi的无线信号,连接上后就可以上网。
--------------------------------
转载请注明出处(毕竟google了许多资料,英文的帖子都看了一大堆)
用树莓派做3G无线路由器的更多相关文章
- node 控制 树莓派做的天气闹钟
node 控制 树莓派做的天气闹钟 在成都上班,下雨天堵车,迟到的概率会很大. 正好手上有一块树莓派 ,做了一个晴雨闹钟. 下雨天 早上 7:00叫我起床 晴天 早上 7:30叫我起床 将自己喜欢的歌 ...
- python idea 利用树莓派做家庭报警系统
1 利用树莓派做家庭报警系统idea 功能如下: 1.程序家侧人不在家(7:00-6:00) 2.树莓派搭配摄像头,对这门进行图像识别,如果变化,门开了,就报警: 3.报警的方式是给我发短信,采信,或 ...
- 树莓派做AP发射wifi(RTL8188CUS芯片) 分类: shell ubuntu Raspberry Pi 2014-11-29 01:25 822人阅读 评论(0) 收藏
最近在做一个项目,需要用树莓派作为AP发射wifi,对比cubieboard,树莓派的配置容易得多,而且支持也更多. 较为官方的介绍配置为无线热点的文章莫过于这一篇<RPI-Wireless-H ...
- 树莓派做路由器_配置防火墙filter和nat转发_转载
转自:https://blog.csdn.net/hustsselbj/article/details/45866681 如果用树莓派当作路由器转发有线和无线网络,则需要对iptables进行相关配置 ...
- 树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)
今天收到了小派,UK产的绿板子,还配了个透明盒子,装在里面闪亮亮的很好看,而且只有卡片大小,寻思着用它做什么好呢?想来想去,看到人家拿小派作家庭媒体中心,还有人拿它当下载机,于是就萌生了一个家庭媒体中 ...
- 用树莓派做电视盒子,安装Android TV系统
有位朋友问我,如何在树莓派上安装盒子系统,这期我就教大家如何安装Android系统,自动动手做一个机顶盒. 如何安装系统,我已经在 树莓派安装系统 这篇文章中了做介绍,有需要的请看这篇文章.安装系统需 ...
- 树莓派做私有云盘-极简版(owncloud)
这里直接给出配置好私有云的镜像,只需烧录镜像后微改配置后即可使用 链接:https://pan.baidu.com/s/1EOQaSQso-0wmnuWgZKknZg提取码:q26h 1.直接将此镜像 ...
- 自己用树莓派做了一个电视盒子,还可以看优酷和cctv
我刚接触树莓派时间不久,安装过raspberry(树莓派官方系统),ubuntu mate,openelec等系统,openelec是一个电视盒子系统,但是我的用的电视机是一个老式的,老是出现闪屏的问 ...
- 树莓派做web服务器(nginx、Apache)
一想到Linux Web服务器,我们首先想到的是: Apache + MySql + Php. Apache:是世界使用排名第一的Web服务器软件. 可以运行在几乎所有广泛使用的计算机平台上,由于其跨 ...
随机推荐
- HttpServerUtility 和 HttpUyility
参考:msdn HttpServerUtility 提供用于处理 Web 请求的 Helper 方法. 2017/08/07 加密解码 这个类没有构造函数,所以不能直接new. ...
- jquery操作DOM 元素(2)
.after() 在匹配的元素集合中的每个元素后面插入参数指定的内容,作为其兄弟节点. .after(content[,content]) content HTML字符串 DOM 元素 元素数组 对象 ...
- 利用deadline_timer实现定时器Timer
// 类似QTimer的定时器 class Timer { typedef void(* handler)(); public: Timer() : m_millseconds() , m_timer ...
- JQuery实现父级选择器(广告实现)
效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- tcp回显客户端发送的数据
客户端: import socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect ...
- Python__for循环和列表生成式的区别
话不多,上例子 >>> L = [,,] >>> for i in range(len(L)): L[i] = L[i] + L[i-] print(L) #结果 ...
- delphi的消息对话框
delphi的消息对话框,类似VFP中的WAIT和MESSAGEBOXdelphi的消息对话框,类似VFP中的WAIT和MESSAGEBOX1.最简单的是:showmessage() 它只有一个OK按 ...
- Educational Codeforces Round 43 E. Well played!(贪心)
E. Well played! time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- realloc函数的用法
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小. 如果将分配的内存减少,realloc仅仅是改变索引的 ...
- MySQL触发器和更新操作
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...