Linux Ubuntu系統之PPP撥號經驗分享
近期,工作需要,我負責開發PPP撥號模組。
說起撥號,算算時間,我已經做過2次了, 暴露年齡了,呵呵。
第一次是剛畢業做的PPOE撥號,給電信做撥號軟體,在河北石家莊工作過一段時間,基於windows xp。
第二次是在移動網優,3G手機路測,即著名的TD-SCDMA,基於AT指令控制手機驅動。
這次,是用的PPPD撥號,在Linux系統下。
pppd 撥號模組,Linux系統是自帶的, 就像windows下自帶的RAS撥號一樣,印表機等很多應用需要通過撥號方式進行通訊的。
Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-161-generic x86_64)
pppd 2.4.5
參考文件,配置4個檔案:
/etc/ppp/peers/myvpn 賬號資訊
remotename myvpn
linkname myvpn
ipparam myvpn
pty "pptp *** --nolaunchpppd --loglevel 0"
lock
nodeflate
name ***
usepeerdns
require-mppe
noauth
require-mppe-128
defaultroute
mtu 1416 #特別關鍵!!!
/etc/ppp/chap-secrets VPN使用者名稱密碼
user pass
/etc/ppp/options 預設設定項
lcp-echo-failure 10 # (from /etc/ppp/options) lcp-echo-interval 10 # (from /etc/ppp/options) lock crtscts nodeflate persist asyncmap 0 noauth hide-password noipx
/etc/ppp/options.pptp 設定項
lock
noauth
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
nobsdcomp
nodeflate
require-mppe-128
ipparam myvpn
defaultroute
個人總結的技巧:
- 一定要升級python3.4 --> python3.7?
我開始很糾結Python版本,程式碼開發是Python3.7最新版,而Ubuntu自帶的是Python 3.4, 故想辦法升級python3.7,如果在本地網速很快,這個不是什麼難事,1小時工作量。
但是,遠端連結SSH,VPS伺服器在國外,網速卡的厲害,本來1小時工作,忙乎了一個上午才搞定,升級到python3.6 + pip3 。 但是一想,我還有n個伺服器呢,故晚上加班把程式碼降級為pyhon 3.4,這樣部署就方便多了 -- 非原則問題,不要在環境上折騰太久,條條大路通羅馬嘛。
這個事情,給我很大的啟示:不要做戰略的矮子,再勤勞的執行力, 團隊的效率也上不來的。
平衡、成本、決策!
- 部署python程式,background job running
windows開發C#很多年,除了前幾年做Unity3D開發的遊戲APP(含VR、AR),這些都是有GUI介面的,而在Linux下,第一個門檻就是無UI介面。
除錯程式通過,部署後,我關閉ssh下班了,吃完飯,遠端ssh,怎麼我的python程式不見了,驚訝不已,才***行程式碼,而且我寫的是 while true 迴圈,不可能自己退出啊。
nohup python3 main.py &
ps ax | grep py
上網搜尋,多虧google,很快就明白了,SSH通過22埠,開啟了一個“session”,一般,如你執行 python3 main.py,隨著SSH Session結束,Linux會kill這個process的。 而這個PPP撥號程式需要作為一個長時間執行的,故需要用 nohup 和 & 關鍵字,這樣當你退出ssh,這個程式會駐留系統。
那麼問題來了,查詢執行的process,常用的 ps all就是不靈了。
要用 ps ax | grep py 才可以。
linux常用工具工具
- [ ] vi 編輯器,linux運維必備神器!
- [ ] cat /var/log/syslog | grep pppd #輸出mylog.log, search pppd
- [ ] cat /var/log/syslog | tail -n 100 #輸出mylog.log 檔案最後100行
- [ ] egrep -v '#|^ *$' /etc/ppp/options #正則,列出配置檔案起作用的
- [ ] * ">" /var/log/syslog #clear syslog
- [ ] * dhclient -v -4 : refresh network #重新獲得IP.
參考文件: