树莓派3G无线网卡拨号上网

硬件设置

树莓派对常见型号的无线上网卡支持非常完善,基本可以做到即插即用,这里我使用的3G模块为SIM5218,支持WCDMA/GSM,即联通2G/3G,移动2G,测试卡为中国联通SIM卡。

0517120339.png

内核打印信息中3G模块自动识别,能看到ttyUSB0-4即说明驱动加载成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
pi@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 05c6:9000 Qualcomm, Inc. SIMCom SIM5218 modem

pi@raspberrypi:~ $ dmesg
[ 19.612188] usbcore: registered new interface driver usbserial
[ 19.612317] usbcore: registered new interface driver usbserial_generic
[ 19.612439] usbserial: USB Serial support registered for generic
[ 19.722022] usbcore: registered new interface driver option
[ 19.722206] usbserial: USB Serial support registered for GSM modem (1-port)
[ 19.723265] option 1-1.4:1.0: GSM modem (1-port) converter detected
[ 20.077635] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 20.136701] usbcore: registered new interface driver cdc_wdm
[ 20.145665] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0
[ 20.146191] option 1-1.4:1.1: GSM modem (1-port) converter detected
[ 20.188948] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 20.191974] option 1-1.4:1.2: GSM modem (1-port) converter detected
[ 20.248902] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
[ 20.250694] option 1-1.4:1.3: GSM modem (1-port) converter detected
[ 20.288505] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
[ 20.289022] option 1-1.4:1.4: GSM modem (1-port) converter detected
[ 20.300976] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB4
[ 20.336944] usbcore: registered new interface driver qmi_wwan

pi@raspberrypi:~ $ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4

接下来确定操作的串口,这就需要一个一个的去尝试,寻找对每个AT命令都能正常返回的串口,如果后面遇到串口卡死不能用的情况,建议换个串口试试,例如在后面执行pppd拨号过程中,ttyUSB2一旦拨号便无法继续使用,必须重新插拔才能回复正常,而ttyUSB3就很正常

至于为什么要生成这么多USB串口,我想是多个进程访问串口的需要,一旦ppp拨号成功,其他进程便无法/dev/ttyUSB3的资源,这时还想获取信息必须使用/dev/ttyUSB2

拨号

ppp

编译安装ppp

1
2
3
4
5
6
7
wget https://download.samba.org/pub/ppp/ppp-2.4.5.tar.gz
tar zxvf ppp-2.4.5.tar.gz
cd ppp-2.4.5/
./configure --prefix=/usr/local/ppp
make && make install
sudo ln -s /usr/sbin/pppd -> /usr/local/ppp/sbin/pppd
sudo ln -s /usr/sbin/chat -> /usr/local/ppp/sbin/chat

新建配置文件

1
2
sudo mkdir -p /etc/ppp/peer
sudo touch /etc/ppp/options

wcdma拨号全局配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ cat /etc/ppp/peers/wcdma

#set debug ,send message to /var/log/messages
debug
#To keep pppd on the terminal
nodetach
lock
#set seriral
/dev/ttyUSB3
# set baudrate
115200
user "card"
password "card"
# set flowdate
crtscts
show-password
usepeerdns
noauth
noipdefault
novj
novjccomp
noccp
# Accept the peer's idea of our local IP address
ipcp-accept-local
# ipcp-accept-remote
ipcp-accept-remote
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'

设置拨号脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat /etc/ppp/peers/wcdma-chat-connect

ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
'' \rAT
OK \rATZ
#这里3gnet是联通3g的接入点
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
#前坑高能 ATDT拨号命令在不同的模块可能有差异 一定注意看手册
OK-AT-OK ATDT*99#
CONNECT \d\c

拨号错误处理

1
2
3
4
5
6
7
8
$ cat /etc/ppp/peers/wcdma-chat-disconnect

ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\nSending break to the modem\n"
'' "\K"
'' "+++ATH"
SAY "\nGoodbay\n"

拨号上网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
$ sudo pppd call wcdma

abort on (NO CARRIER)
abort on (ERROR)
abort on (NO DIALTONE)
abort on (BUSY)
abort on (NO ANSWER)
send (^MAT^M)
expect (OK)
AAT^M^M
OK
-- got it
send (^MATZ^M)
expect (OK)
^M
ATZ^M^M
OK
-- got it
send (^MAT+CGDCONT=1,"IP","3gnet",,0,0^M)
expect (OK)
^M
AT+CGDCONT=1,"IP","3gnet",,0,0^M^M
OK
-- got it
send (ATDT*99#^M)
expect (CONNECT)
^M
ATDT*99#^M^M
CONNECT
-- got it
send (\d)
Serial connection established.
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB3
CHAP authentication succeeded
CHAP authentication succeeded
Could not determine remote IP address: defaulting to 10.64.64.64
local IP address 10.140.231.235
remote IP address 10.64.64.64
primary DNS address 218.104.111.114
secondary DNS address 218.104.111.122

分配完IP地址的各种配置即拨号成功,也自动添加了ppp0接口

1
2
3
4
5
6
7
8
pi@raspberrypi:~ $ ifconfig ppp
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.140.231.235 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:55 (55.0 B) TX bytes:80 (80.0 B)

拨号拿到的DNS只是在/etc/ppp/resolv.conf,必须链接到全局DNS才能域名访问

1
2
3
4
5
6
pi@raspberrypi:~ $sudo mv /etc/resolv.conf /etc/resolv.conf.bak
pi@raspberrypi:~ $sudo ln -s /etc/ppp/resolv.conf /etc/resolv.conf
pi@raspberrypi:~ $ cat /etc/resolv.conf

nameserver 218.106.127.114
nameserver 218.104.111.122

另外路由配置也要更改,调整树莓派的默认网关为ppp连接的另一端地址

1
2
3
4
5
6
7
8
9
10
pi@raspberrypi:~ $ sudo route add default gw 10.64.64.64
pi@raspberrypi:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0
0.0.0.0 192.168.0.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 303 0 0 wlan0
10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0

测试

查看公网IP
1
2
3
4
5
6
7
8
pi@raspberrypi:~ $ curl cip.cc
IP : 113.57.250.187
地址 : 中国 湖北省 武汉市
运营商 : 联通

数据二 : 湖北省武汉市 | 联通

URL : http://www.cip.cc/113.57.250.187
ping测试
1
2
3
4
5
6
7
8
9
10
pi@raspberrypi:~ $ ping sfantree.com -c 4
PING sfantree.com (123.56.22.253) 56(84) bytes of data.
64 bytes from 123.56.22.253: icmp_seq=1 ttl=50 time=108 ms
64 bytes from 123.56.22.253: icmp_seq=2 ttl=50 time=97.1 ms
64 bytes from 123.56.22.253: icmp_seq=3 ttl=50 time=105 ms
64 bytes from 123.56.22.253: icmp_seq=4 ttl=50 time=144 ms

--- sfantree.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 97.181/114.013/144.633/18.166 ms
路由跟踪
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pi@raspberrypi:~ $ traceroute sfantree.com
traceroute to sfantree.com (123.56.22.253), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 211.91.153.5 (211.91.153.5) 135.674 ms 135.721 ms 135.593 ms
4 211.91.152.102 (211.91.152.102) 135.521 ms 113.57.249.186 (113.57.249.186) 134.105 ms 211.91.152.138 (211.91.152.138) 143.938 ms
5 211.91.152.209 (211.91.152.209) 153.055 ms 163.428 ms 153.207 ms
6 * * *
7 124.65.194.18 (124.65.194.18) 67.194 ms 124.65.194.22 (124.65.194.22) 76.475 ms 124.65.194.30 (124.65.194.30) 86.204 ms
8 * * *
9 61.49.137.14 (61.49.137.14) 79.101 ms 79.579 ms 89.555 ms
10 123.56.34.22 (123.56.34.22) 148.611 ms 123.56.34.6 (123.56.34.6) 129.153 ms 123.56.34.22 (123.56.34.22) 89.278 ms
11 * * *
12 * * 123.56.34.66 (123.56.34.66) 715.710 ms
13 * * *
14 123.56.22.253 (123.56.22.253) 816.901 ms 815.764 ms 817.479 ms
ssh

学校网今天断网了,正好利用树莓派连上云主机更新博客,你能看到这篇文章就说明ssh测试成功…

分享到: