第一篇博客献给我做了很长时间的课程设计,也就是题目所说的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无线路由器的更多相关文章

  1. node 控制 树莓派做的天气闹钟

    node 控制 树莓派做的天气闹钟 在成都上班,下雨天堵车,迟到的概率会很大. 正好手上有一块树莓派 ,做了一个晴雨闹钟. 下雨天 早上 7:00叫我起床 晴天 早上 7:30叫我起床 将自己喜欢的歌 ...

  2. python idea 利用树莓派做家庭报警系统

    1 利用树莓派做家庭报警系统idea 功能如下: 1.程序家侧人不在家(7:00-6:00) 2.树莓派搭配摄像头,对这门进行图像识别,如果变化,门开了,就报警: 3.报警的方式是给我发短信,采信,或 ...

  3. 树莓派做AP发射wifi(RTL8188CUS芯片) 分类: shell ubuntu Raspberry Pi 2014-11-29 01:25 822人阅读 评论(0) 收藏

    最近在做一个项目,需要用树莓派作为AP发射wifi,对比cubieboard,树莓派的配置容易得多,而且支持也更多. 较为官方的介绍配置为无线热点的文章莫过于这一篇<RPI-Wireless-H ...

  4. 树莓派做路由器_配置防火墙filter和nat转发_转载

    转自:https://blog.csdn.net/hustsselbj/article/details/45866681 如果用树莓派当作路由器转发有线和无线网络,则需要对iptables进行相关配置 ...

  5. 树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)

    今天收到了小派,UK产的绿板子,还配了个透明盒子,装在里面闪亮亮的很好看,而且只有卡片大小,寻思着用它做什么好呢?想来想去,看到人家拿小派作家庭媒体中心,还有人拿它当下载机,于是就萌生了一个家庭媒体中 ...

  6. 用树莓派做电视盒子,安装Android TV系统

    有位朋友问我,如何在树莓派上安装盒子系统,这期我就教大家如何安装Android系统,自动动手做一个机顶盒. 如何安装系统,我已经在 树莓派安装系统 这篇文章中了做介绍,有需要的请看这篇文章.安装系统需 ...

  7. 树莓派做私有云盘-极简版(owncloud)

    这里直接给出配置好私有云的镜像,只需烧录镜像后微改配置后即可使用 链接:https://pan.baidu.com/s/1EOQaSQso-0wmnuWgZKknZg提取码:q26h 1.直接将此镜像 ...

  8. 自己用树莓派做了一个电视盒子,还可以看优酷和cctv

    我刚接触树莓派时间不久,安装过raspberry(树莓派官方系统),ubuntu mate,openelec等系统,openelec是一个电视盒子系统,但是我的用的电视机是一个老式的,老是出现闪屏的问 ...

  9. 树莓派做web服务器(nginx、Apache)

    一想到Linux Web服务器,我们首先想到的是: Apache + MySql + Php. Apache:是世界使用排名第一的Web服务器软件. 可以运行在几乎所有广泛使用的计算机平台上,由于其跨 ...

随机推荐

  1. HttpServerUtility 和 HttpUyility

    参考:msdn HttpServerUtility 提供用于处理 Web 请求的 Helper 方法. 2017/08/07            加密解码 这个类没有构造函数,所以不能直接new. ...

  2. jquery操作DOM 元素(2)

    .after() 在匹配的元素集合中的每个元素后面插入参数指定的内容,作为其兄弟节点. .after(content[,content]) content HTML字符串 DOM 元素 元素数组 对象 ...

  3. 利用deadline_timer实现定时器Timer

    // 类似QTimer的定时器 class Timer { typedef void(* handler)(); public: Timer() : m_millseconds() , m_timer ...

  4. JQuery实现父级选择器(广告实现)

    效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  5. tcp回显客户端发送的数据

    客户端: import socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect ...

  6. Python__for循环和列表生成式的区别

    话不多,上例子 >>> L = [,,] >>> for i in range(len(L)): L[i] = L[i] + L[i-] print(L) #结果 ...

  7. delphi的消息对话框

    delphi的消息对话框,类似VFP中的WAIT和MESSAGEBOXdelphi的消息对话框,类似VFP中的WAIT和MESSAGEBOX1.最简单的是:showmessage() 它只有一个OK按 ...

  8. 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 ...

  9. realloc函数的用法

    realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小. 如果将分配的内存减少,realloc仅仅是改变索引的 ...

  10. MySQL触发器和更新操作

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...