在水一方 https://blog.vic.mh4u.org 蒹葭蒼蒼,白露為霜。所謂伊人,在水一方。 Tue, 22 Oct 2024 16:28:12 +0000 zh-TW hourly 1 https://wordpress.org/?v=6.7.1 haproxy https://blog.vic.mh4u.org/2024/1704 https://blog.vic.mh4u.org/2024/1704#respond Tue, 22 Oct 2024 16:27:44 +0000 http://blog.vic.mh4u.org/?p=1704 這是我在另一個網站所寫的筆記,試試直接內嵌過來:

]]>
https://blog.vic.mh4u.org/2024/1704/feed 0
k8s ingress 學習 https://blog.vic.mh4u.org/2023/1699 https://blog.vic.mh4u.org/2023/1699#comments Mon, 28 Aug 2023 16:51:53 +0000 http://blog.vic.mh4u.org/?p=1699 閱讀全文 ]]> 最近在學習 k8s 卡在 Ingress 這個問題很久了,找了許多資料,都沒法成功的將 Ingress 設定在自架的 k8s cluster 裡面,大約有好幾個禮拜都無法解決這個問題。
我有一個對 k8s 很熟的前輩可以請教,但他只說英文與他溝通只能用英文。英文請教對我來說不太是問題,電腦的英文用法都很簡單的,大部份直接貼指令給他,他就知是什麼意思了。

Ingress 這問題對 k8s 的初學者來說,的確很難,自已胡亂試的結果似乎也不知問題到底出在哪裡
比如說:Load Balancer 要選哪一套? Ingress Controller 該選哪一套? 是我的 yaml 設定檔有錯呢?還是我的 Ingress Controller 安裝有問題? type該選 NodePort 還是ClusterIP? 一堆問題….

想要去請教那位前輩,可是我連問題都說不清楚,怎麼去請教人家,人家想幫你可能也無從幫起,所以就一直拖著沒去問。

直到這幾天我腦袋像是突然開竅了一樣,知道怎麼把我的問題簡單而清楚的描述好。
步驟如下:
我先在 minikube 上面測試好 Ingress 的設定都 ok
minikube 上面要啟用 Ingress 功能,很簡單只要一行指令就行
minikube addons enable ingress
接著確認我設定的 pod.yaml , service.yaml , ingress.yaml
這3個檔案內容都沒有錯誤,把這3個檔案和我執行過的指令寄給他

然後再跟他說我用哪些指令把 k8s cluster 搭起來,和用什麼指令把 Ingress-nginx-controller 裝起來
接著把那3個yaml檔拿來我搭的 k8s cluster apply 之後,為什麼 Ingress 設定起不來
當他看過我執行的指令和 yaml 檔之後,很快的就幫我找出問題了,只要在 ingress.yaml 裡面加上這一行 ingressClassName: nginx 問題就都解決了!

天哪! 困擾我幾個禮拜的問題,他不到一天的時間就幫我解決了!

經此事件之後,深感對一個問題的陳述能力很重要呀,是否能夠簡單清楚把問題描述出來,前輩高手們才能有辦法在最短的時間內幫你找出問題。

今天也把我的 Ingress 筆記整理好了,若你有興趣的話,可到此來看
http://note.zn2.us/k8s5.htm

]]>
https://blog.vic.mh4u.org/2023/1699/feed 2
陣列進階應用 https://blog.vic.mh4u.org/2023/1691 https://blog.vic.mh4u.org/2023/1691#respond Sun, 29 Jan 2023 05:22:08 +0000 http://blog.vic.mh4u.org/?p=1691 閱讀全文 ]]> 簡要說明:兩個陣列在同一個迴圈內同時展開內容,應用於同時有網址和下載後要儲存的檔名。

#!/bin/bash
#說明:兩個陣列在同一個迴圈內同時展開內容
#應用於:youtube 網址下載影片、下載後的檔案名稱
#建立日期: 2022/1020	更新日期:2023/0128
#作者:夢見草
#系統需求:需要安裝 youtube-dl 套件

###################變數宣告#############
INPUT=/tmp/t/http1.txt
OUPUT=/tmp/nfs/
fName=/tmp/t/filename.txt
###################變數宣告#############

#宣告變數annie 為陣列
declare -a URL
URL=(`cat $INPUT`)

declare -a john
john=(`cat $fName`)


#echo 計算陣列裡共有幾筆資料
#echo "${#URL[*]}"
count="${#URL[*]}"

#引用陣列的所有索引值(從0開始)
#echo ${!john[*]}

#底下開始帶出陣列內容

for ((index=0; index<$count; index++)); do
#index從0開始; index小於10; index每次加1
    #debug:
    #echo ${john[$index]} 
    #echo ${URL[$index]} 
    #開始使用背景抓檔 
    youtube-dl -f '137+140' --merge-output-format mp4 ${URL[$index]}  -o"$OUPUT${john[$index]}.mp4"
done   
]]>
https://blog.vic.mh4u.org/2023/1691/feed 0
攻殼機動隊講座 https://blog.vic.mh4u.org/2017/1695 https://blog.vic.mh4u.org/2017/1695#respond Mon, 01 May 2017 16:37:20 +0000 http://blog.vic.mh4u.org/?p=1695 閱讀全文 ]]> 上上個星期六,和我太太去聽底下這個藝文講座,

http://www.accupass.com/event/register/1704171904534187810820

與攻殼機動隊有關的講座,主要是藉由這部電影探討AI、生命、哲學、自我意識、機器學習….收獲頗多,大概的記一下今天聽到的內容:

AI(人工智慧) 的部份,英文(Artificial Intelligence),Artificial(人工) 的部份比較沒有問題,但是 Intelligenc(智慧、智能)就比較有爭議,對於什麼是智慧目前仍沒有一個比較明確的定義或分界。目前對於智慧的認識也是隨著科技不斷的在演變,比如說現在的相機都有人臉辨識的功能,能夠在畫面上把人臉框出來,現在大家不會覺得它是AI,可是在以前若程式能做到人臉辨識的功能,人們就會認為那是AI了。

AlphaGo下圍棋很利害,可以下驘人類,可有人就要說它下圍棋很利害,可是它懂圍棋嗎?這是人類很自大的地方,就好象我跟你下圍棋,可是我下輸你了,然後我說你驘了,可是你懂圍棋嗎?

AI的分類分兩種, Strong AI:擁有心靈及自我意識。 Weak AI:表現出有智慧的行為。現今人類的科技只能達到Weak AI而已, Strong AI 目前只出現在電影、動漫、小說中。

機器學習 Deep learning,目前最大的一個問題就是這些研究者本身害怕的一件事,就是我們餵給它很多資料了,但是它裡面到底學習了什麼東西我們不知道,我們只能觀察到它表現出來的行為。比如說現在google在做的自動駕馭汽車,我們可以設定一堆條件,紅燈停、綠燈行,可若遇到比較複雜的情況時,它判斷錯誤了,把紅燈看成綠燈就開過去了,那你說他是判斷錯誤還是故意的? 這些我們現在都無法知道,因為我們根本就不知道到底學了什麼東西。 Deep Learning 目前理論的部份很缺乏,但實際的應用面卻很廣,已經應用到很多地方去了,它現在比較強的是圖象分析,有人用它來分析小黃瓜的品種,藉由它開發出將小黃瓜依賣相分類成高中低價位。

還有,當別台車子要來撞你的時候,你是應該加速離開,還是往旁邊閃撞上電線杆,還是撞上人群,什麼樣的做法才能把傷害降至最下這些情況,就是人來判斷也都不一定能做出很好的判斷。

weak AI 分幾個層級
• Level 0:執行規則、行銷用
• Level 1:依照知識庫作搜尋
• Level 2:學習、探索
• Level 3:自動特徵產生、高層次抽象化

人腦比AI優秀

記憶問題,若我今天不提我旁邊這位他今天穿什麼上衣,回去的話,你可能連想都想不起來,因為他有符合你的認知,你就不會去記憶它。不需要記的東西,不會花力氣去特別記它,記憶很花能量的。

AI的現狀

框架問題, 有一個經典的例子常被提起,就是機器人取定時炸彈上的電池,可參考這裡

不用恐慌,新AlphaGo離強人工智慧還有十萬八千里

大意是說,讓AI機器人進房去將定時炸彈上的電池取出來,結果一拿電池炸彈就爆炸了

再做一個AI機器人,教它做事要考慮後果,結果機器人一進去,就開始計算,它走的這一步會不會影響地球的轉動、太陽會不會掉下來….考慮太多不相關的事物,考慮太久炸彈爆炸了。就是說它資料庫裡面的資料要全搜尋一遍、計算一遍。

而我們人類就可以很輕易的做到這點,比如說我演講要打開麥克風,我不會去考慮我打開這麥克風開關會不會影響地球的轉動,或引起大爆炸,很輕易的就能專注在一件事上。

會中大家比較有興趣的議題是 AI 究竟會不會有自我意識?會不會發展到象終結者電影那樣毀滅人類? 其實就意識本身目前仍沒有一個明確的定論或分界,這部份仍有爭論,比如說你知道你有意識,可是你能說出意識是什麼嗎? 有人可能會說能意識到”我”的存在,可什麼是”我”? 有”我”這種東西嗎?

“我” 這就屬於哲學的範疇了,哲學在”我”的論述有很多。笛卡兒的我思故我在,並非將它粗淺的理解為”我思考所以我存在”。 比方說,我們人有時會因為精神狀況不佳,而看錯東西,或誤認東西,那會不會這些東西本來就都是假的,這世界所有的東西其實都是假的,我們只是被以某種型式告知了這個是世界是這樣,這物體是這樣,就有點象駭客任務那樣生活在母體裡的人,他們所生活的世界其實都是電腦灌給他們的訊息,他們的本體其實是生存在膠囊裡。所以懷疑這一切都是假的這個思想,就很重要,才造就了我,只有我(內在)才是真的,除了我以外都是假的…..這個在網路上都可查到相關的資料,我就不多寫了,可參考這裡

https://zh.wikipedia.org/wiki/我思故我在

「我思故我在」真的無容置疑嗎?

提問時間時,我提了一個問題,AI研究者不知機器學習了什麼東西,不能寫個程式讓它吐出它所學到的東西嗎? 于立天副教授回應:目前是有人在做這樣子的事,可是不多,一方面是大家都在努力的提高它的效能和應用,因為這部份有資金贊助,對於讓機器吐出它所學的東西這部份的研究就比較少,一方面是關心安全的人不多,另一方面是沒有資金,還有就是機器學習的語言是類神經學,你要讓它吐讓我們人類能理解的語言,那要經過一個轉譯過程,凡是翻譯必有失真,就象英文與中文翻譯必不能100%照原意翻出來,類神經學語言更是這樣。他推薦了一本書”網路殺神 守護程式”。

會中也有人提問了”機器人三原則”的問題來討論,關於機器人三原則的細節不清楚的可以參閱底下這頁
https://zh.wikipedia.org/wiki/机器人三定律

我簡單介紹一下,它這個理論很經典,常在很多與AI機器人有關的電影裡都會被提到,如威爾史密斯主演的機械公敵…

于立天副教授針對這個問題回應:”機器人三原則”我個人看起來它是無懈可擊,重點在於”傷害人類”這個定義太廣了…..(我自己心裡補充:是的,就是讓人自己來定義”傷害人類”這事的範圍都不一定能定義的很好,更何況交給AI自己去判斷)

請鬼拿藥單

由於AI各方面的發展很快,有些人士就擔心是不是要立法來保護人類…但是文科的人通常不知理工科的人在想什麼,換句話說就是這些要定法律的人根本不知那些研究AI的人在做什麼,那要怎麼定法律呢?因此他們就請了google做自動駕馭的人,這些有實作經驗的人來參與討論或幫忙制定一些法案,這就等於是”請鬼拿藥單”這些人正在努力的發展、研究AI時,你他們幫忙制定法案時,他們會立一些限制他們正在研究、正在發展的一些法案嗎? 肯定不會嘛!

本來這講座我是不太想去的,因為門票就要250元,兩個人就要500元,覺得有點貴,不太想去,想說他們講的網路上大概都可以看得到。來了之後,也沒白來,收獲不少,至少就AI的部份,今天就講的很全面,幾句話就帶我了解到了目前AI的發展現狀和限制。

I paid $500 for it, make it account!

中譯:我花了500,就要讓它有價值一點!

]]>
https://blog.vic.mh4u.org/2017/1695/feed 0
asterisk安全性設定 https://blog.vic.mh4u.org/2017/1664 https://blog.vic.mh4u.org/2017/1664#comments Thu, 16 Mar 2017 09:55:02 +0000 http://blog.vic.mh4u.org/?p=1664 閱讀全文 ]]> 若你的 asterisk 使用預設定的 5060 port 的話,一定會受到不少騷擾,底下就介紹怎樣針對這些騷擾做防護。

首先要說明的是,基於安全考量,請您盡量避免使用預設的 5060 port ,這樣您的系統會安全許多,也可少做很多防護,當然事情都有例外,可能要跟你對接的一類、二類電信業者他們只能接受 5060 port 跟你對接,你要用他們的服務的話,那你也只能配合他們的要求,這篇文章所要介紹的就是你不得不使用5060 port的情況下,怎樣保護你的 asterisk 系統。

先從最簡單的方法講起

(1).鎖固定IP

要跟你對接一、二類電信業者,他們一定都會有固定IP,你就可以針對他們的IP來開放5060 port這樣就可避免你的5060 port被別人騷擾。

底下是使用 iptables 鎖5060 port 固定IP的設定範例

#放行所有的內網IP
-A INPUT -s 192.168.0.0/16 -j ACCEPT
#針對是方電訊IP,開放5060,和rtp port範圍10000~20000
-A INPUT -i eth0 -s 202.153.167.30 -p udp  -i eth1 -m multiport --dports 5060,10000:20000  -j ACCEPT
#一般使用上面這條規則就可以了,該開放的port位都有開到,但你在與他們對接時仍有問題的話,可考慮改用下方這條規則,針對UDP協定 port 位全開。
#針對是方電訊IP,udp協定全開放
#-A INPUT -i eth0 -s 202.153.167.30 -p udp -j ACCEPT

這是最簡單的設定方法,保護了你的5060 port不被不明人士騷擾。
以上的方法,需要你的使用者(sip client)都在內網才行,你的使用者都在內網來連你的asterisk這是最單純、最簡單的設定環境。

若將來你的使用者需要使用到sip soft phone(軟體電話)來連接你的asterisk時怎麼辦?
這問題很快就會遇到,因為現在智慧型手機很普遍了,不用軟體電話的話,等於是asterisk的武功被廢了一半,有這樣的功能和這樣的需求,你就要想辦法幫使用者解決問題。

我建議的解法是,再架一台 asterisk ,取名叫sip2,把5060port改掉,你自己挑一個port跟使用者公佈即可。
而原本和一、二類電信業者對接的那台我們叫sip1
底下只講做法概念,不講設定細節,因為互連的設定細節講起來會花太大篇幅,設定細節可參考我的另一篇筆記
sip1 5060port只放開特定IP
sip2 要跟sip1對接,你可走sip協定,也可走iax2協定這兩種方法都可以。
我成功的案例是用iax2對接,因為在你要使用sip協定來與sip1對接的時候你會發現 sip1是5060port,而sip2非5060port,這個設定起來可能就有些麻煩,當初我為了要避開這麻煩,所以我就挑了 iax2 協定來對接。
但在使用 iax2 設定時,發現 iax.conf 這裡面的帳號設定,若帳號少的話,只有一兩個你可能還不會發現這問題,iax帳號一旦多了的話,你就會發現它的帳號名稱會亂對應,這是個麻煩的地方。

設定好的架構會是這樣
軟體電話→→sip非5060port→→sip2server→→4569port(iax協定)→→sip1server→→sip5060port→→一、二類電信業者

上面所介紹的是比較簡單的情況,底下要介紹的是,你對接的電信業者和你的使用者都要使用5060port來跟你連線,通常這是很不得已的情況,你應盡量避免這樣的情況。我遇到的情況是接手一台已經上線多年的 asterisk ,眾多的使用者們使用5060port來連線已經多年了,要通知到這些眾多的使用者修改連線設定的難度太大,只能從server端的安全性下手加強。

(2).使用5060port時的各項防護

前面的最後一段已經介紹了我們不得不使用5060port來連線的狀況,接下來我們就來真正的面對它會遇到的問題

1.sip帳號會被暴力破解
2.匿名使用者撥打電話
3.DOS攻擊

針對上面的問題一一說明解法

1.sip帳號暴力破解

針對這個問題,我們可以使用fail2ban來抵擋,參考這一頁有詳細的設定說明。

2.匿名使用者撥打電話

白話一點講就是使用者不用註冊帳密就可以撥打電話,這個安全性問題分兩個層面要注意。

① dialplan設定
就是別人撥進你的asterisk總機系統之後,聽到IVR(語音提示)
IVR說:請直撥分機號碼,或撥9由總機為您服務
但是撥進來的人,這時候他不撥分機,也不撥9接聽總機,而是直接撥手機號碼或撥國際電話之類的…
你就要避免這種情況發生,簡單說就是 dialplan 設計的不夠嚴謹所產生的安全問題
若你還不曾意識到這個問題的話,趕快按我說的方法去測試一下你的系統是不是能就這樣直撥外線呢,若可以的話,你就得趕快的修改一下你的dialplan了。

② sip.conf 安全設定

[general]
useragent=JustPBX
;不透露asterisk版本訊息
alwaysauthreject=yes 
;指沒有註冊的帳號不能撥打電話
allowguest=no
;不允許匿名使用者撥打電話

3.DOS攻擊

這個問題一般人不太容易遇到。我遇到的情況是跟我對接的cisco設備,他要送話務給我,而我的 sip.conf 裡面不能設定底下這個參數
allowguest=no
我必須把上面那個設定給註解掉或刪掉,才能正常的接他傳過來的話務,否則就接不了它的送來的話務。但把那行設定刪掉之後,就變成任何沒有帳號的人都可以送話務到我的 asterisk 裡來了,再加上我的5060 port 沒有鎖固定IP,這樣的話,5060 port 被騷擾的事就會經常的發生。這是一個我不得不放開allowguest所遇到的麻煩,另外一個問題是大家都會遇到的,我從後台觀察到,有直接送話務過來的、有來試帳號的…不管怎樣,它們都有一個共通的最大的問題,就是因為他們沒有註冊所以log裡不會有IP記錄,也就很難用fail2ban來擋他們。

直接引用osslab一段話
重大安全威脅事件
[2011-6-3] 連 Fail2Ban 都無法阻擋的攻擊方式,當攻擊者在未註冊狀態下直接撥 Asterisk 的分機時,不管分機存在與否,Asterisk 都不會紀錄來源 IP,以致於無法使用 fail2ban 進行阻擋,攻擊者可藉此做出類似 DDos 攻擊以癱瘓 Asterisk 主機。(目前尚未有合適的解決方案 可修改dialplan 來改善)

查看 /var/log/asterisk/message 常出現這樣的訊息

[2013-04-21 14:59:33] NOTICE[1466] chan_sip.c: Sending fake auth rejection for device 1000;tag=04cd6231
[2013-04-21 14:59:33] NOTICE[1466] chan_sip.c: Sending fake auth rejection for device 1000;tag=04cd6231
[2013-04-21 14:59:34] NOTICE[1466] chan_sip.c: Sending fake auth rejection for device 1000;tag=a0029e1f
[2013-04-21 14:59:34] NOTICE[1466] chan_sip.c: Sending fake auth rejection for device 1000;tag=a0029e1f
[2013-04-21 14:59:34] NOTICE[1466] chan_sip.c: Sending fake auth rejection for device 1000;tag=18696bd1

參考資料:Missing ip address in logAsterisk not logging originating IP of a brute force attackFail2ban False sense of securitysip error logging

請參考上面的參考資料,簡單說就是某些情況的入侵行為 asterisk log 裡沒有辦法記錄到入侵者的IP,所以也就沒有辦法使用 fail2ban 來擋它,這是個壞消息,因為我曾看過我的server裡,入侵者一秒內就可以發出上百個連線,就算它沒有入侵成功,也嚴重的在消耗我的系統資源,若不做些處理方法的話,那他就可以用這招DOS的方式來搞垮我的服務。我估計一台DOS就能搞垮我的服務了,還不需動用到DDOS,嗯所以會是個滿嚴重的問題。

解決方法要從 dialplan 說起,一般我們的 asterisk 要接收別人的sip話務,都會有一個對外的context,你可以叫它 public、from-pstn、default 或 incoming 都行,不同版本的 asterisk 它的預設名稱還不一樣,但你隨時可在sip.conf 裡的 gereral 區段修改這個參數 context=public

我們就叫它 public 好了,這個 public 就是外線進來的第一個context

底下是extensions.conf設定範例

[public]

;從遠傳接收話務
exten => 4495123,1,Goto(ivr1,s,1)

;從亞太電信收話務
exten => 40580999,1,Goto(ivr2,s,1)

;從voip gateway接收話務
exten => fromGateway,1,Goto(ivr3,s,1)

;其它的號碼全掛斷
exten => _X.,1,Hangup

[ivr1]
;撥放語音提示:XXX您好,請直撥分機號,或按9由總機為您服務。
.....

[ivr2]
;撥放語音提示:XXX您好,請直撥分機號,或按9由總機為您服務。
.....

說明一下上面設定的意義,我們跟電信公司申請了兩個代表號,遠傳4495123跟亞太40580999,透過sip trunk跟我們對接,所以我們的public只有這兩個號碼進來才是正常的,其它進來的都是異常的,直接掛斷。這樣做就能起到一定的防護作用,至少你的內部分機不會接到騷擾電話,俗稱”鬼來電” 因為入侵者都是用程式在試分機號,試對分機號了,分機就響了,但程式不會講話,所以就叫鬼來電。這裡也說明了一個很重要的概念,若你的話務進來的方式非跟電信業者直接用sip trunk對接,而是用asterik卡,或voip gateway之類的將PSTN線路透過你的設備進入你的asterisk,你也要注意,不要讓這些話務直接就能撥通你內部的分機,否則你的內部分機就會有鬼來電的困擾,可參考我上面的設定範例。

上面是 dialplan 比較正確的設定方法,可有效的解決鬼來電的問題,但仍沒解決fail2ban不起作用的問題,重點在那個”其它號碼全掛斷”的地方我們要改寫一下,參考底下設定

;其它號碼全掛斷之前,記下它們的IP
exten => _X.,1,Noop(ip:${CHANNEL(recvip)})
 same => n,Log(NOTICE,bad incoming call ip:${SIPCHANINFO(recvip)})
 same => n,Waitexten(3)
 same => n,Hangup
;可用此指令core show function SIPCHANINFO 來看詳細用法
;SIPCHANINFO此指令已棄用,建議改用CHANNEL()

exten => t,1,Hangup

按上面的方式,我們就可以把入侵者的IP記錄到log裡了,那些指令都是asterisk內建的指令,所以解法早就有了,只是你會不會運用而已,這就看個人的功力了。

log已有記錄到入侵者的IP了, fail2ban 就能起作用了,當然 fail2ban 你得設定一下才行,新增filter規則之類的。

注意: asterisk function SIPCHANINFO
此 functions 從 asterisk 10~12 版都有,但在13版拿掉此功能了
https://wiki.asterisk.org/wiki/display/AST/Upgrading+to+Asterisk+13
建議改用 CHANNEL 此 function

]]>
https://blog.vic.mh4u.org/2017/1664/feed 2
槌子理論 https://blog.vic.mh4u.org/2017/1661 https://blog.vic.mh4u.org/2017/1661#respond Sun, 05 Mar 2017 07:51:21 +0000 http://blog.vic.mh4u.org/?p=1661 閱讀全文 ]]> “If all you have is a hammer, everything looks like a nail.”

這句話來源於美國的心理學家馬斯洛 Maslow

中文意思是:如果你手上只有槌子,那麼所有的東西看起來都釘子” 文字的表面意思很淺,但內含的涵意卻很值得我們深思,意思是指人們慣於用自己熟悉的方式來解決問題,不管它合不合適。

這是今天在看電影 “Arrival” 裡面的一句話。

這就讓我想到自己,平時面對問題的解決方法是什麼?
我若與人溝通不順暢,是用更大的音量壓過對方、或是其它較強勢的手段來得到自己要的? 幾次下來若都得到自己要的話,那這就成了一種慣性,也就成了自己熟悉的方式來解決問題。

講的更白話一點,溝通不良時,就用吵鬧、發脾氣來得到我要的!

這是一方面,另一方面,可能自己有自卑心,所以有時對別人的批評會比較敏感,覺得受傷害了,就會反過來攻擊別人,以此來保護自己,已經習慣性的用這方法來解決問題,也從沒想過它合不合適。今天有人提醒我,其實你可以有更好的處理方式,比如說你可以跟對方說:「你那樣說會讓我不舒服,請你以後不要說」這樣子的表達就很清楚了,不需要去指責對方做了什麼傷害你的事,也不用一再的證明你受了多大的傷害….這都是多餘的。

不要再手拿著槌子,把大家都當成釘子了。

另外”Arrival” 裡面的語言專家也提到了一點,就是我們平常常說的那些話語,你以為對方很容易聽懂的話,其實也很容易產生很大的誤解。對一句話的理解有很大的不同,所以也不要因為別人誤解你的話,而有太大的情緒。

今天所學的這句英文,對我真有震聾發聵的點化與提醒作用呀!

1478902253607

]]>
https://blog.vic.mh4u.org/2017/1661/feed 0
dial備用路由 https://blog.vic.mh4u.org/2017/1567 https://blog.vic.mh4u.org/2017/1567#respond Fri, 10 Feb 2017 09:45:12 +0000 http://blog.vic.mh4u.org/?p=1567 閱讀全文 ]]> 我們在asterisk裡面若有不只一個外撥路由的話,我們該怎樣設定比較好?

若你想要查找更多這方便的資料,可試試試這些關鍵字 asterisk dial fail over

外撥路由,指的是我們撥打到PSTN的那一段路由。

一般若沒有加任何判斷式,會是這樣子的設定

[Call_out]
exten => _XXX.,1,Noop
 same => n,Dial(SIP/sip1/${EXTEN},60,XxWw)
 same => n,Dial(SIP/sip2/${EXTEN},60,XxWw)
 same => n,Hangup

直接就將兩個外撥路由給設定上去了,這是最簡單無腦式的設定方法。
缺點是,在某些情況下,同一個號碼會被撥兩次,比如對方拒絕你的來電又沒有設定語音信箱,就會撥兩次。

若你的外撥路由是在內網,或者你只需要擔心它ping得通不通的問題,可加入一點簡單的判斷式,底下的判斷式是參考此頁所寫。


#sip.conf 裡的設定
[sip1]
---
---
;先在這裡設定檢查存活
qualify=yes
qualifyfreq=30 
;檢查存活頻率
; Qualification: How often to check for the host to be up in seconds
; and reported in milliseconds with sip show settings.
; Set to low value if you use low timeout for NAT of UDP sessions
; 預設 60 秒
qualifygap=60 ; Number of milliseconds between each group of peers being qualified
; Default: 100

[sip2]
---
---
qualify=yes


#extensions.conf 裡的設定
[Call_out]
exten => _XXX.,1,Noop
 ;設定變數名稱 sip1status
 same => n,Set(sip1status=${SIPPEER(sip1,status)})
 ;same => n,Set(sip1status=${IAXPEER(sip1,status)})
 ;若你的 sip1 是使用IAX協定的話,上面的變數也要記得改成 IAXPEER
 ;語法 GotoIf(條件指定?真值名稱:假值名稱)
 same => n,Gotoif($[ "${sip1status}" = "UNREACHABLE" ]?sip2)
 ;條件判斷,若sip1斷線,則跳往sip2
 same => n,Dial(SIP/sip1/${EXTEN},60,XxWw)
 same => n,Hangup
 same => n(sip2),Dial(SIP/sip2/${EXTEN},60,XxWw)
 same => n,Hangup

若你的外撥路由是跟二類電信申請的SIP trunk的話,這些路由大多都有一個問題,就是超賣。比如說他們只申請了 T1 專線,有24路電話訊號,也就是同時間可供24人通話,但他們不可能只賣給24個客戶來使用這些線路,他可能會是賣給100個客戶,大家共同來擠這24線,這樣我們上面的判斷式就會有一個問題了,雖然這個 sip trunk 是ping得通的,但是對方的線路太忙了,擠不上,就會撥出失敗,所以上面的判斷式針對這種情況就不太適用,得改一下。底下的判斷式是參考此頁所修改的。

[Call_outbound]
exten => _XXX.,1,Noop
 same => n,Dial(SIP/sip1/${EXTEN},60,XxWw)
 same => n,GotoIf($[${DIALSTATUS}=CHANUNAVAIL | ${DIALSTATUS}=CONGESTION]?dial2)
 same => n,Hangup
 same => n(dial2),Noop(啟用備用路由)
 same => n,Dial(SIP/sip2/${EXTEN},60,XxWw)
 same => n,Hangup

上面的判斷式只簡單的檢查物 dial status 的兩個狀態 CHANUNAVAIL 和 CONGESTION 這兩個都會是sip trunk 忙線或有狀況時常會出現的狀態,當然你也可以自己多加一點 dial status 狀態進來。
Dial() 的傳回狀態有幾種:
ANSWER, BUSY, NOANSWER, CANCEL, CONGESTION, CHANUNAVAIL, DONTCALL, TORTURE, INVALIDARGS

基本上,以上的判斷式大概就夠用了,但我在查資料時發現還有另一種寫法,它是使用巨集的方式來寫的,記下來參考用。
底下的語法是經我測試過可行的,我在網路上查到的,可能是它的asterisk版本過舊,直接照它的語法copy來用不了,所以我仿照它的方式修改如下:


[globals]
ROUTE1 = SIP/sip1/
ROUTE2 = SIP/sip2/#前綴碼1
ROUTE3 = SIP/sip3/#前綴碼2
ROUTE4 = SIP/sip4/#前綴碼3
MAX_ROUTE = 4

[macro-direct-dial]
exten => s,1,Set(CALL_ATTEMPT=1)
exten => s,2,Set(OUT=${ROUTE1})
exten => s,3,Dial(${OUT}${ARG1},60,XxWw)
exten => s,4,GotoIf($["${CALL_ATTEMPT}" >= "${MAX_ROUTE}"]?s-CANCEL,1)
; 若變數 CALL_ATTEMP 大於 ${MAX_ROUTE} 則跳往 s-CANCEL 標,取消撥號
exten => s,5,Set(CALL_ATTEMPT=$[ ${CALL_ATTEMPT} + 1])
;變數 CALL_ATTEMP 加1
exten => s,6,Goto(${DIALSTATUS})
 same => n(CHANUNAVAIL),Set(OUT=${EVAL(${ROUTE${CALL_ATTEMPT}})})
 same => n,Noop(${OUT})
 same => n,Goto(s,3)
 same => n(CONGESTION),Set(OUT=${EVAL(${ROUTE${CALL_ATTEMPT}})})
 same => n,Noop(${EVAL(${ROUTE${CALL_ATTEMPT}})})
 same => n,Goto(s,3)
 same => n(BUSY),Noop()
 same => n(NOANSWER),Noop()
 same => n,Hangup()
exten => s-CANCEL,1,Hangup()


[Call_outbound]
exten => _XXX.,1,Noop
 same => n,Macrol(direct-dial,${EXTEN})
 same => n,Hangup

以上的方式經我反覆的測試,修正了語法錯誤之後,確定是可行的,但是對我來說不好用,最後沒用上,為什麼呢? 雖然不同的二類電信業者要帶不同的前綴碼給他們的這個問題我解決了,但是,外撥的號碼,有些是要加02、03…這些區碼,送去二類電信時,就得把這些0給拿掉,但送去一類電信時,又要加上0,一會兒加0,一會兒減0…算了,反正前面的判斷式夠我用就可以了,這個問題,暫時就不去傷腦筋了。

]]>
https://blog.vic.mh4u.org/2017/1567/feed 0
暫不說話 https://blog.vic.mh4u.org/2016/1560 https://blog.vic.mh4u.org/2016/1560#respond Sat, 01 Oct 2016 15:51:55 +0000 http://blog.vic.mh4u.org/?p=1560 閱讀全文 ]]> 當生氣的時候盡量不要多說話、不要多發表意見!
這是一種智慧也是一種功夫,因為很可能別人多激你兩句,你忍不住又多說話了。

或者是你還沒有到生氣的程度,但已經有情緒了,或者是不耐煩、輕視、瞧不起對方….之類的負面情緒,最好也不要多說話,或多表示意見。因為這時侯你所說的話,大概都只是抱怨、指責或其它的負面情緒的話,對雙方的溝通沒有任何一點幫助。反而只會使情況更糟。

凡是做不到心平氣和的與對方溝通的話,那就暫緩溝通。

提醒自己,自己的個性是比較急的,遇到的問題或事情總是想要盡快的解決或處理掉。
可是人與人之間的關係,或者是感情上、情緖上的問題,就不一定能讓你這樣子著急的想要去把它處理好。

比如說,人家無緣無故的對你發了一頓脾氣了,把你罵了一頓了,或者就是兇你不給你好臉色看,也不願跟你說他為什麼這樣對你, 那你只能暫時忍下來,非要問個清楚他為什麼這樣對你,只是把事情搞得更糟。

又或者是你真的做錯事了,對不起人家了,人家不想見到你,也不想跟你說話,而你卻著急的想跟人家道歉,多表示一點歉意,硬這樣做時,可能也會把事情搞得更糟,就說順其自然一點,不要強求。

在感情的處理上,對別人的態度和緩一點,這是基本原則,把握好這個原則,就比較不會把事情搞砸。

沒有情緒了,才能真正的好好的溝通,盡量不要帶著情緒去找別人溝通。

]]>
https://blog.vic.mh4u.org/2016/1560/feed 0
pve4和vlans https://blog.vic.mh4u.org/2016/1532 https://blog.vic.mh4u.org/2016/1532#respond Thu, 31 Mar 2016 03:55:08 +0000 http://blog.vic.mh4u.org/?p=1532 閱讀全文 ]]> Proxmox VE 4.x 的 vlan 功能完整,現就介紹實際應用

我們需要搭配一台網管式 switch ,也就是可切vlan的switch,我們選用 ZyXEL GS1900-8 8port switch 這一台。

應用說明:

ZyXEL GS1900-8 8port switch

ZyXEL GS1900-8 8port switch

參閱上圖,1~7 port,我們分別切成 vlan1~7, 第8port設為trunk port接 pve4 server,這樣的接法用意是在1~7port可接7條小烏龜線路,而pve4 裡的虛擬子機,則可透過 trunk port 分別調用這7條線路,現在的很多虛擬系統都支援vlan,所以這樣的接法應用是很廣的。

重點提醒:1~7port的這七條線路得是100M以下的速率,而trunk port得用cat6的網路線,才能上1G的速率,這樣才不會發生效能瓶頸卡在trunk port上面。

底下先介紹 ZyXEL GS1900-8 8port switch 這台設定的方法:
預設值: http://192.168.1.1 帳:admin 密:1234

[tip]設定重點提醒:
access port:不打tag,需設定untagged 和設定pvid
trunk port:打vlan tage,不動pvid
如:
port2 設定vlan2 pvid 和 vlan2 untagged
port3 設定vlan3 pvid 和 vlan3 untagged

trunk port設定:
除了個別port設定vlan tagged之外,trunk port也都要跟著在每個vlan裡打tag[/tip]

設定VLAN

首先先加7個vlan
zyxel2

設定PVID

仿照下圖,在7個port上面設定好7個 PVID,第8port設為trunk port 不動PVID
zyxel3

設定untagged

vlan1保留預設值不動
zyxel4
vlan2開始設定,將第2port設定為untagged
因為access port 不打 tag ,而excluded中文是不包括的意思(第2port我們要設成vlan2所以怎能不包括?) Forbidden中文是禁止的意思, 所以只剩一個正確的選項 untagged
vlan3~vlan7則比照這個vlan2來設定。
zyxel5
而第8port是trunk port,它要在每個vlan上面都打tag才能正確的調用這7條線路。

以上的設定都完成了,光按apply是不夠的,全部設定完了之後,一定要按右上角的save,才能真正的儲存了你的設定,才不會在你的switch重開機之後,所有的設定都流失。但…
原文:Click this to apply your changes to the Switch’s run-time memory. The Switch loses these changes if it is turned off or loses power, so use the Save link on the top navigation panel to save your changes to the non-volatile memory when you are done configuring.
根據原文大意可能是,按右上角的save,只會存入 run-time memory (不知是否等同於 Running configuration),估計還要點左下角的maintenance才行

zyxel6

進左下角的 maintenance=>configuration=>management
設定
Running configuration => Startup configuration ==> apply

註:2016/03/31 初步測試按右上角的save即可儲存設定,還要再測第2次才能確認。

Proxmox VE 4 vlan 設定

我這台機器上面有2張網卡,eth0 和 eth1 ,拿 eth1 當trunk port 使用,所以這張網卡的網路線要直連 switch 上面的第8port

vim /etc/network/interfaces

auto vmbr1
iface vmbr1 inet static
        address 192.168.1.4
        netmask 255.255.255.0
        bridge_ports eth1
        bridge_stp off
        bridge_fd 0

按以上這樣設定好了之後,應該就能ping到switch 192.168.1.1 的IP,若ping 不通的話,請回頭檢查你的設定和網路設備,因為到這一步若不通的話,後面就算設對了也沒用,因此請務必確認能ping通了之後再往下做

若你的母機想要能直接撥接上網的話,請將小烏龜接在第1port (vlan1)然後撥接第1port的帳密,就能上網。

Container子機設定

pppoe撥接

vim /etc/pve/lxc/10x.conf
加入底下這行
lxc.cgroup.devices.allow = c 108:0 rwm # /dev/ppp
lxc.mount.entry = /dev/ppp dev/ppp none bind,optional,create=file
註:不要編輯/var/lib/lxc/100/config此檔,無用,重啟CT之後內容會被還原
子機要安裝底下這兩個套件才能撥接
aptitude install ppp pppoeconf
註:pve4不象pve3那樣受限於母機一定要先撥接過後,子機才能正常撥接

子機vlan設定請參照下圖
pve1
只要在vlang tag那一欄上面填上你要使用的vlan數字,就可調用1~7條不同的線路,需注意的是這數字只能填2以上的數字,所以若你是想要用vlan1的話,那麼這個欄位留白不填即可。

按以上設定就可以在Proxmox VE 4.X 裡經由一張網卡,一條網路線調用7條不同的Internet線路。

]]>
https://blog.vic.mh4u.org/2016/1532/feed 0
vim搜尋取代 https://blog.vic.mh4u.org/2016/1524 https://blog.vic.mh4u.org/2016/1524#respond Tue, 16 Feb 2016 11:26:56 +0000 http://blog.vic.mh4u.org/?p=1524 閱讀全文 ]]> 在vim裡要怎麼做到搜尋取代功能呢?

要在指令列輸入指令

鳥哥教的指令:

:n1,n2s/word1/word2/g

n1 與 n2 為數字。在第 n1 與 n2 列之間尋找 word1 這個字串,並將該字串取代為 word2 !舉例來說,在 100 到 200 列之間搜尋 vbird 並取代為 VBIRD 則:
『:100,200s/vbird/VBIRD/g』。

:1,$s/word1/word2/g

從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2 !(常用)

:1,$s/word1/word2/gc

從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代!(常用)

底下是在別的地方看到的

:%s/word1/word2/g

從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2 !
跟前面的指令有些象,不同的是 $s 變成 %s 而且少打了最前面的1

]]>
https://blog.vic.mh4u.org/2016/1524/feed 0