SORACOM의 동글을 식별하고 연결하는 방법

7505 단어 AK-020SORACOMMS2372
SORACOM의 동글을 Raspberry Pi에서 사용할 때, AK-020(3G)과 MS2373(LTE)의 어느 쪽을 삽입해도 적절히 연결해 주는 설정을 실시했습니다. 올바른 방법인지 모르겠지만, 일단 움직였으므로 방비록으로 기재.

SORACOM씨의 공식 사이트에서는 wvdial을 이용해 접속하는 방법이 기재되어 있습니다만, 동작이 불안정했기 때문에 pppconfig를 사용해 접속하고 있습니다.

1. AK-020 고유의 설정



AK-020은 Raspberry Pi에 연결하면 CD-ROM으로 인식됩니다. 그것을 USB 시리얼로 변환하기 위한 설정이 여기입니다. CD-ROM을 eject하고 usbserial에 등록할 때까지 설명되어 있습니다.

[/etc/udev/rules.d/40-ak020.rules]
# for AK-020
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="a403", RUN+="/usr/bin/eject /dev/sr0"
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="7d0e", RUN+="/sbin/modprobe usbserial vendor=0x15eb product=0x7d0e"

2. AK-020과 MS2372 공통 설정



이 부분은 USB 시리얼이 접속해 오면, AK020의 경우는 USB 시리얼과/dev/ak020에, MS2372의 경우는/dev/ms2372에 심볼릭 링크를 작성시켜,wwan0의 네트워크를 기동시키는 부분이 기술된다 있습니다.

[/etc/udev/rules.d/50-soracom.rules]
# for AK-020
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="ak020",ENV{SYSTEMD_WANTS}="[email protected]"
# for MS2372
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="12d1", ATTRS{../idProduct}=="1506", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="00", SYMLINK+="ms2372", ENV{SYSTEMD_WANTS}="[email protected]"


3. pppconfig 설정



pppconfig에서 모뎀 별 연결 정보를 설정합니다.
$ sudo pppconfig



"Create a connection"을 선택하여 모뎀별로 다음과 같이 설정합니다.


modem
AK-020
MS2372


공급자 이름
soracom020
soracom2372

COnfiguration Name Server
동적
동적

Authorization
PAP
PAP

Your ISP
소라
소라

password
소라
소라

속도
460800
460800

Pulse or Tone
Tone
Tone

Replace your number
*99#

99**1#

Choose Modem Config Method
아니
아니

Manually Select Modem Port
/dev/ak020
/dev/ms2372


마지막으로 "Finished write files and return main menu"를 선택하여 종료합니다.

이 작업으로 각각 2개의 파일(합계 4 파일)이 작성됩니다.
/etc/ppp/peers/soracom020
/etc/ppp/peers/soracom2372
/etc/chatscripts/soracom020
/etc/chatscripts/soracom2372

스크립트 편집 1


sudo -s 에서 루트 권한으로 로그인합니다. 그런 다음 /etc/ppp/peers/soracom020/etc/ppp/peers/soracom2372를 열고 debug를 제거하거나 마지막으로 persist, replacedefaultroute를 추가합니다. 작성한 파일이 여기

....peers/soracom020


# This optionfile was generated by pppconfig 2.3.18. \
# 
#
hide-password 
noauth
connect "/usr/sbin/chat -f /etc/chatscripts/soracom020"

/dev/ak020
460800
defaultroute
noipdefault 
user "sora"

ipparam soracom020
|
usepeerdns
persist
replacedefaultroute

.... peers/soracom2372


# This optionfile was generated by pppconfig 2.3.18. 
# 
#
hide-password 
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/soracom2372"
/dev/ms2372
460800
defaultroute
noipdefault 
user "sora"
remotename soracom2372
ipparam soracom2372

usepeerdns
persist
replacedefaultroute

스크립트 편집 2 /etc/chatscripts/...



/etc/chatscripts/soracom020


# This chatfile was generated by pppconfig 2.3.18.
# Please do not delete any of the comments.  Pppconfig needs them.
# 
# ispauth CHAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATH
OK AT+CFUN=1
OK ATZ
OK 'ATQ0 V1 E1 S0=0 &C1 &D2'
OK AT+CGDCONT=1,"IP","soracom.io"
# ispnumber
OK-AT-OK "ATD*99#"
# ispconnect
CONNECT \d\c
# prelogin

# ispname
# isppassword
# postlogin

# end of pppconfig stuff

/etc/chatscripts/soracom2372


# This chatfile was generated by pppconfig 2.3.18.
# Please do not delete any of the comments.  Pppconfig needs them.
# 
# ispauth PAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATZ
OK ATZ
OK AT+CGDCONT=0,"IP","soracom.io"
OK AT+CGDCONT=1,"IP","soracom.io"

# ispnumber
OK-AT-OK "ATD*99***1#"
# ispconnect
CONNECT \d\c
# prelogin

# ispname
# isppassword
# postlogin

# end of pppconfig stuff

4. wwan0 설정



USB 모뎀이 삽입되면 wwan0에서 스크립트가 실행되도록 설정합니다./etc/network/interfaces 에 다음 세 줄을 추가합니다.
allow-hotplug wwan0
mapping wwan0 inet ppp
    script /...../script.rb

5. 모뎀이 삽입될 때 스크립트



/dev에 등록된 모뎀을 검사하여 모뎀 시작 스크립트인 pon의 스크립트를 수정하고 있습니다.
exit 1, exit 2등을 이용해 network/interfaces 의 파일내에서도 할 수 있는 것 같습니다만, 잘 가지 않았습니다.

[script.rb]
#!/usr/bin/ruby
tmp = `ls /dev`
dev = tmp.split("\n")
dev.each {|d|
    if d == "ak020" then
        `pon soracom020`
        exit 1
        elsif d == "ms2372" then
        `pon soracom2372`
        exit 2
    end
}
exit 0

이제 한 번 잘 작동했습니다.

동작 확인 방법



동작하지 않을 때의 디버그는 /var/log/syslog 등을 보면서 실시합니다.

(1) rules.d 확인


/dev/ak020 또는 /dev/ms2372의 심볼릭 링크가 만들어지지 않은 경우 1.과 2.에 문제가 있습니다.

(2) /etc/network/interfaces 설정



(1)이 제대로 작동하면 syslog는 script.rb를 실행했다는 메시지를 출력해야합니다. 아래의 경우에는 실패한 메시지가 흐르고 있지만 잠시 기다리면 통신이 성공합니다.

script.sh를 실행했다는 메시지가 흐르면 [email protected]의 설정이 작동하고 있습니다.
Apr  8 10:05:38 raspberrypi sh[2597]: ifup: error trying to executing mapping script /xxxxxxxxx/script.sh on wwan0
 --- (省略) ---
Apr  8 10:05:41 raspberrypi pppd[2623]: Serial connection established.
Apr  8 10:05:41 raspberrypi pppd[2623]: Using interface ppp0
Apr  8 10:05:41 raspberrypi pppd[2623]: Connect: ppp0 <--> /dev/ak020
Apr  8 10:05:44 raspberrypi pppd[2623]: CHAP authentication succeeded
Apr  8 10:05:44 raspberrypi pppd[2623]: CHAP authentication succeeded
Apr  8 10:05:55 raspberrypi pppd[2623]: Could not determine remote IP address: defaulting to 10.64.64.64
Apr  8 10:05:55 raspberrypi pppd[2623]: replacing old default route to wlan0 [192.168.30.1]
Apr  8 10:05:55 raspberrypi pppd[2623]: local  IP address xx.xx.xx.xx
Apr  8 10:05:55 raspberrypi pppd[2623]: remote IP address xx.xx.xx.xx
Apr  8 10:05:55 raspberrypi pppd[2623]: primary   DNS address xx.xx.xx.xx
Apr  8 10:05:55 raspberrypi pppd[2623]: secondary DNS address xx.xx.xx.xx
Apr  8 10:06:02 raspberrypi dhcpcd[667]: wwan0: removing interface

(3) 스크립트의 동작 확인



스크립트가 실행될 때 이 샘플 프로그램은 exit 1, exit2를 각각 반환합니다.echo $? 를 스크립트를 실행한 직후에 콘솔에서 하면 exit 코드를 얻을 수 있으므로 스크립트가 올바른지 확인할 수 있습니다.

(4) 모뎀 시작 프로그램



마지막은 /etc/ppp/peers/xxxxx/etc/chatscripts/ 가 올바르게 동작하고 있으면, 회선을 자동으로 접속할 수 있습니다.

좋은 웹페이지 즐겨찾기