ubuntu 連校園網(wǎng) via l2tp

因?yàn)樵跇漭缮蠈懩_本會(huì)有點(diǎn)卡,
就先在臺(tái)式機(jī)上寫寫看, 還能邊寫邊用瀏覽器查...

連校園網(wǎng), 這次是用腳本實(shí)現(xiàn)的, 上次是用一個(gè)下載的軟件, 但是那個(gè)被我重新裝之后比规, 就不能用了次伶,因?yàn)樵谝郧皼]有記錄下怎么配置的過程,
那現(xiàn)在堵未, 用現(xiàn)在的方法扶平,可以做到開機(jī)就連上網(wǎng)絡(luò),

首先 先說一下, 這個(gè)撥號(hào)的過程,

  1. 學(xué)校的局域網(wǎng)內(nèi)有個(gè) 192.168.254.1 的服務(wù)器是作為l2tp的server.
    學(xué)生作為client, 可以和他建立vpn, 也就是l2tp隧道.
  2. 在隧道建立完成之后, 會(huì)使用ppp協(xié)議作為載體, 把隧道內(nèi)傳輸?shù)臄?shù)據(jù)按照ppp來打包, 然后這些ppp包就從這個(gè)隧道中發(fā)到server. 從而實(shí)現(xiàn)上網(wǎng).

有個(gè)鏈接: 解釋了為啥還是在使用l2tp作為上網(wǎng)的認(rèn)證手段,而不是用ppop啥的:
https://www.zhihu.com/question/26810403
簡單的說, 就是認(rèn)證用戶是用ppp協(xié)議的, 但是宿舍到server不是一條線的, 中間要經(jīng)過好多個(gè)路由啥的, 就不是peer to peer的了, 那么ppp的包就過不去了, 最后要借助l2tp這個(gè)在ip層的協(xié)議來幫助發(fā)送ppp包.

然后再來看怎么配置:

要下的軟件:

要建立l2tp連接, 那么就要用xl2tpd這個(gè)軟件.
要用ppp協(xié)議發(fā)送包, 那么就要用pppd這個(gè)軟件.
( 如果l2tp是要加密的話, 好像還要下載其他的東西, 但是我發(fā)現(xiàn), 聯(lián)通的這個(gè)東西, 是不加密的, 密碼都是明文發(fā)送的......)
你可以用apt-get 來下載這兩個(gè)包.

給軟件的配置文件:

xl2tpd 的配置文件:
/etc/xl2tpd/xl2tpd.conf
內(nèi)容:

[lac testvpn]
name = test   
lns = 192.168.254.1
pppoptfile = /etc/ppp/peers/testvpn.l2tpd
ppp debug = yes

第一個(gè)name,這個(gè)選項(xiàng)不曉得干啥的,但是例子上有..
第二個(gè)就是遠(yuǎn)端服務(wù)器的ip.
第三個(gè)是ppp協(xié)議的配置文件, 因?yàn)閤l2tpd在建立完成隧道之后, 就會(huì)自己啟動(dòng)pppd, 所以他就需要知道pppd的配置文件在哪里.
第4個(gè)是 是否要輸出ppp的詳細(xì)運(yùn)行信息.
更多的有關(guān)配置的信息可以在這里找到:https://linux.die.net/man/5/xl2tpd.conf
配置是分lac 和lns和global的, global和lns的配置不用去管, lns是服務(wù)器的配置信息.
因?yàn)閤l2tpd還是可以用作服務(wù)端的, 我們就只用到了作為客戶的功能.

然后就是要設(shè)置 pppd 的配置文件:
/etc/ppp/peers/testvpn.l2tpd
內(nèi)容:

remotename testvpn
user "賬號(hào)"
passwrod 密碼
unit 0
nodeflate
noauth
persist
noaccomp
maxfail 5
usepeerdns 
debug

這些參數(shù)可以用 man pppd來查詢,
這個(gè)option文件是我抄網(wǎng)上的教程后修修改改出來的,
有些東西也不知道為啥....
我發(fā)現(xiàn), 我們的機(jī)器的ip和dns都是需要server告訴我們的, 所以加了 usepeerdns.
然后ppp 有兩種認(rèn)證的方式PAP和CHAP, 我選的是PAP, 因?yàn)楦杏Xchap比較高級(jí), chap比較耗費(fèi)運(yùn)算??
這些認(rèn)證過程可以/var/log/syslog文件中找到.

有個(gè)中文的翻譯:http://blog.csdn.net/chenliang0224/article/details/8572699
然后兩個(gè)文件設(shè)置完成之后, 就要啟動(dòng)這個(gè)連接了.

首先啟動(dòng)xl2tp:

xl2tpd -c /etc/xl2tpd/xl2tpd.conf -D

-c 是指定配置文件
你不加這個(gè)也可以, 因?yàn)閤l2tpd的默認(rèn)的配置文件就是這個(gè)目錄上的文件.
-D 是debug模式, 不加的話, xl2tpd就會(huì)變成后臺(tái)進(jìn)程, 但可以用ps aux | grep xl2tpd 和 kill 殺死...
然后你就可以在當(dāng)前的terminal中看到他的執(zhí)行情況了.

然后再發(fā)送連接指令給xl2tpd

echo 'c testvpn' > /var/run/xl2tpd/l2tp-control

這里的testvpn這個(gè)名字, 就是上面設(shè)置的remotename, 我不清楚這兩個(gè)名字是不是有關(guān)系的, 其實(shí)改一下就好知道, 但是太懶....

echo 'd testvpn' > /var/run/xl2tpd/l2tp-control 是斷開連接.

成功的話, 就可以在ifconfig中看到ppp0接口了.
如果不成功, 就需要查看日志來找出錯(cuò)誤.
我碰到的大部分的錯(cuò)誤是可以在 xl2tpd -D的那個(gè)terminal中可以看出來的,
我經(jīng)常就是 ppp 的參數(shù)設(shè)置錯(cuò)誤, 然后xl2tpd檢測到錯(cuò)誤后就殺死了pppd啥的, 反正就改改配置文件后再來一邊試試看.
還有一個(gè)可以看到日志的地方就是 /var/log/message 或者 /var/log/syslog 文件.
你可以再開個(gè)窗口, 然后用 tail -f 看.
反正目標(biāo)就是 看不到 fail的字樣. 要看到: 隧道成功建立和ppp認(rèn)證成功.
這里是我的成功后的兩個(gè)日志的情況:


syslog.png

上圖是 syslog 的. 可以看到, 在l2tp連接建立之后, 就會(huì)有
Mar 8 18:08:11 dogegg-HP pppd[3618]: sent [LCP EchoReq id=0x2 magic=0x2a789e01]
Mar 8 18:08:11 dogegg-HP pppd[3618]: rcvd [LCP EchoRep id=0x2 magic=0x4dd4d216]
這樣子的收發(fā)信息, 這個(gè)是代表這個(gè)隧道是存在的,30s一次( 這個(gè)東西很重要, 和路由有關(guān))
然后我們可以看到服務(wù)器發(fā)給我們, 我們的ip地址, 我們的主/次dns服務(wù)器地址, 還有他的地址.

xl2tpd_-D.png

上圖是xl2tpd進(jìn)程的日志, 可以看到他一步步的把配置文件中的內(nèi)容給解析出來, 如果有解析錯(cuò)的, 那么肯定會(huì)打印出來的.

設(shè)置路由

這樣弄完之后, 網(wǎng)上的教程都說, 你就可以上網(wǎng)了, 但是我不行.....

因?yàn)槭锹酚傻膯栴}.....
我們要讓電腦的所有流量都經(jīng)過ppp0端口出去, 而不是原來的eth0啥的.
現(xiàn)在我們的情況是 我們和服務(wù)器連上了, 但是我們包還是從默認(rèn)的路由默認(rèn)的網(wǎng)關(guān)發(fā)送出去的.
用route -n看到的情況大概是這樣子的.

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0            10.64.70.1       255.255.255.255   ?????????
10.64.70.0      0.0.0.0         255.255.255.0   U     100    0        0 enx000ec6d2bc57
101.68.75.84    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enx000ec6d2bc57

第一條的??參數(shù)是我忘記了... 就亂打上去.
destination是 0.0.0.0的那條是叫做default路由. 數(shù)據(jù)包不知道往哪里發(fā)的話, 就發(fā)那邊去.
我的路由表在 沒有連上ppp0之前就只有3個(gè)路由, 就是現(xiàn)在的去掉第三條的樣子.
最后一條169.254.0.0的是local-link, 查了百度, 也沒怎么弄清楚這是干啥的, 反正不影響.

如果想把流量都改了的話, 那么就應(yīng)該把default給刪除再加上一條去ppp0的default,
但是, 并不是把所有的流量都給導(dǎo)過去, 我們和server的通訊是要走網(wǎng)卡的不能走ppp0.
所以, 就需要3條route命令來改:

echo 'add route to 192..' 
route add -host 192.168.254.1 gw $getway dev enx000ec6d2bc57 
echo 'del default' 
route del default
echo 'add default to ppp0' 
route add default gw $remote dev ppp0

這是腳本里面寫著的, 這樣子改完之后, 應(yīng)該就好上網(wǎng)了.如果還不行...
可以試試看ping remote通不通. 然后ping那個(gè)dns服務(wù)器.
我本來以為加上 ping 的-I 參數(shù) 就可以跳過路由, 但是如果路由不對(duì), 就算加上-I ppp0, ping的包好像也是不會(huì)順利的發(fā)送出去的.

下面是腳本:

#!/bin/bash
dir=/home/dogegg/Desktop/log.txt
#因?yàn)閤l2tpd進(jìn)程是自動(dòng)隨著系統(tǒng)開機(jī)而運(yùn)行的, 就不用寫入腳本了.
echo 'c testvpn' > /var/run/xl2tpd/l2tp-control

#在發(fā)送完連接命令之后, 就每隔2s檢查下有沒有ppp0的接口在ifconfig中出現(xiàn). 次數(shù)超過10次就exit.
count=0
while [ $count -lt 10 ]; do
    haveppp0=`ifconfig | grep ppp0`
    if [[ $haveppp0 != "" ]];then
        break
    fi  
    echo 'check ppp0 is exist, time:'$count > $dir
    let count=count+1
    sleep 2s
done 
if [[ $count == 10 ]];then
    echo 'time out!' >> $dir
    exit 0
fi
echo 'ppp0 is exist!' >> $dir

#匹配出 網(wǎng)關(guān)的地址. 
getway=`ifconfig enx000ec6d2bc57 | grep 'inet addr'`
reg='.*inet addr\:([0-9]+\.[0-9]+\.[0-9]+\.)([0-9]+).*'
if [[ "$getway" =~ $reg ]];then 
        pre=${BASH_REMATCH[1]}
        last=${BASH_REMATCH[2]}
else
    exit 222
fi  
getway=$pre'1'

# 匹配出 遠(yuǎn)程server的地址
remote=`ifconfig ppp0 | grep 'P-t-P'`
reg='.*P-t-P:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*'
if [[ "$remote" =~ $reg ]];then 
        remote=${BASH_REMATCH[1]}
else
    exit 223
fi  

### debug!!
echo 'the getway is '$getway >> $dir
echo 'the remote is '$remote >> $dir
###

#改改路由:
echo 'add route to 192..' >> $dir
route add -host 192.168.254.1 gw $getway dev enx000ec6d2bc57 
echo 'del default' >> $dir
route del default
echo 'add default to ppp0' >> $dir
route add default gw $remote dev ppp0


exit 0

最后就是配置開機(jī)了

在/etc/rc.local
文件中加入運(yùn)行腳本的語句
如果 想知道一些出錯(cuò)的信息, 我用的是笨辦法, 就是讓我的腳本里面的echo把字符串輸出到一個(gè)桌面的文件中($dir), 但是好像網(wǎng)上有比較優(yōu)雅的辦法, 看上去是改輸出流啥的:

exec 2> /tmp/rc.local.log 
exec 1>&2
set -x

不懂.... 用不來, 但是在 /tmp/rc.local.log里面可以看到:

+ ./home/dogegg/Desktop/checkppp0.sh
+ exit 0

下一步就是把這個(gè)東西轉(zhuǎn)到樹梅pi上.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隔显,一起剝皮案震驚了整個(gè)濱河市却妨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌括眠,老刑警劉巖彪标,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掷豺,居然都是意外死亡捞烟,警方通過查閱死者的電腦和手機(jī)薄声,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來题画,“玉大人默辨,你說我怎么就攤上這事〔韵ⅲ” “怎么了缩幸?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竞思。 經(jīng)常有香客問我表谊,道長,這世上最難降的妖魔是什么盖喷? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任爆办,我火速辦了婚禮,結(jié)果婚禮上课梳,老公的妹妹穿的比我還像新娘距辆。我一直安慰自己,他們只是感情好暮刃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布跨算。 她就那樣靜靜地躺著,像睡著了一般沾歪。 火紅的嫁衣襯著肌膚如雪漂彤。 梳的紋絲不亂的頭發(fā)上雾消,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天灾搏,我揣著相機(jī)與錄音,去河邊找鬼立润。 笑死狂窑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桑腮。 我是一名探鬼主播泉哈,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼破讨!你這毒婦竟也來了丛晦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤提陶,失蹤者是張志新(化名)和其女友劉穎烫沙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隙笆,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锌蓄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年升筏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘸爽。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡您访,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剪决,到底是詐尸還是另有隱情灵汪,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布柑潦,位于F島的核電站识虚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妒茬。R本人自食惡果不足惜担锤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乍钻。 院中可真熱鬧肛循,春花似錦、人聲如沸银择。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浩考。三九已至夹孔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間析孽,已是汗流浹背搭伤。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袜瞬,地道東北人怜俐。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像邓尤,于是被迫代替她去往敵國和親拍鲤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354