2020/03/05

WireGuard NAT2NAT連線失敗的經驗分享

WireGuard的連線設定說明

前言

和過去的VPN系統相較, WireGuard並沒有OpenVPN Push Router/user password的設定
因此設定上比較簡單, 但困難度也在這裡, 並像過去route add 的方式新增route tables
老派的IT人員在操作上很容易GG陣亡

設定

wireguard需要透過指令產生private key和Public key.
sudo -i 切成root
wg genkey | tee /etc/wireguard/server-privatekey | wg pubkey > /etc/wireguard/server-publickey

以下為圖例
< Server > ----------------------------------  < Client >​  

  wg genkey                                     wg genkey 

S_Private key                                  C_Private key  

S_Public key                                   C_Public key  

產生後需要手動建立Server的conf , 名稱預設為wg0 /wg1 ...etc.
Client則需在Server端建好或是複製彼此的Public key交換訊息

以下為圖例
< Server > ----------------------------------  < Client >​  

 wg0.conf                                     我是客戶端.conf                                                   

S_Private key                                 C_Private key   

C_Public key                                  S_Public key  

請參考以下我的用戶範例

PC或手機的用戶端檔案 River.conf
[Interface]   #這是建立一個interface, 在mac或是windows下會產生個tun0與server端的wg0做連線  
PrivateKey = CCCCCCCCCCC= #這是C_Private key, wg gen建好複製在此  
Address = 10.10.100.100/32 #要與wg0連線的ip地址, 比較麻煩的是每個用戶需要一個專用ip, 沒法設0自己dhcp抓  

[Peer]  #連線到wg0的peer, 如果你有多用戶, 開個新的peer建, peer不要共用, 因為ip不同     
PublicKey = SSSSSSSSSSS=  #這是S_Public key, 需要從Server wg gen好後複製過來   
AllowedIPs = 10.10.100.2/32, 192.168.0.0/16 #這邊是路由與ip block的封禁區段, 需要另外說明      
Endpoint = xxx.xxx.xxx.xxx:5987 #中華電信的public ip , 或vps服務器遠端的ip      

Server端設定範例 wg0.conf.

[Interface] 
Address = 10.10.100.2/24 #Server wg0 ip  
ListenPort = 5987 #Server暴露的port  
PrivateKey = SSSSSSSSSSS= #Server的Private Key  
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o **br0** -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o **br0** -j MASQUERADE

# 如果是NAT的環境需要將ip封包轉發,你會需要將wg0的封包轉發到你的網卡上**br0**是我的網卡
# 你可能需要檢查一下你的網卡的名稱, 每人不太一樣 eno1, ens4n0, eth0....etc
# 另這行設定完後回去bash命令下, 設定sysctl, 需要將net.ipv4.ip_forward=1 
# sudo vim /etc/sysctl.conf
# 將底下這個設定值修改正確即可! (本來值為 0 ,將它改為 1 即可)
# net.ipv4.ip_forward = 1
# 最後重啟網路
# sudo /etc/init.d/networking restart

# S2S 這是Site to Site的設定   
[Peer]
PublicKey = XXXXXXXXXXXXXX= #對口server public key  
AllowedIPs = 10.10.100.1/32 #對口的wg0的ip地址   
Endpoint = xxx.xxx.xxx.xxx:5987 #對口Public暴露的ip+port   
PersistentKeepalive = 15 #需要保持長連接所以需要PersistentKeepalive的參數  

# 如下範例 ,每個用戶需要將對應的Client端產生的 public key 複製一份給WireGuard Server
# 且重要的, IP不可以衝突, 不然wg會打架連不上去

# User1
[Peer]
PublicKey = QQQQQQQQQQQQQQ=
AllowedIPs = 10.10.100.3/32

# User2
[Peer]
PublicKey = WWWWWWWWWWW=
AllowedIPs = 10.10.100.4/32

AllowedIPs

# 說的比較簡單點這個設定就是路由

Server端和Client端都有AllowedIPs
注意這裡, 需要特別設定這個參數不然會route loop你的Server, 然後就再也連不上你的主機了.
我的Client設定是
AllowedIPs = 10.10.100.2/32, 192.168.0.0/16
預設我可以ping到10.10.100.2, 可以透過公司的路由訪問192.168.2.1/192.168.1.1等兩個區域的網段(以我的例子是台北與雲林)

我的"出口" IP會是我原本的, 不會透過wg0的主機IP
比方說我的手機是211.x.xx.90, wg0是出口是135.xxx.xxx.194, 那我去curl http://ifconfig.me   時會是211.xx.xx.90

那如果此時設定0.0.0.0/0
就會讓所有封包透過的wg0轉發, 此時curl http://ifconfig.me 就會135.xxx.xxx.194

Server端沒事不要設定0.0.0.0/0

除非你很清楚知道你在幹嘛?! @@

因為default 的路由設定0.0.0.0的封包轉發會透過原有的eth0轉包
你同時設置兩個0.0.0.0的時候會造成routing loop
或者你要route del default 在eth0上的路由
但還是一樣, 除非你很清楚知道你route del default路由在幹嘛, 不然不要亂刪

路由的問題待解

我的情境是兩個台北雲林的路由器下方設置Port暴露
然後兩邊WG互聯Site2Site, 或精確一點說NAT2NAT

就我嘗試的情況下, wg0沒辦法在有其他路由路徑的情況下
可以同時訪問外部, 也能同時訪問對面跨區域的服務網段
在NAT下, 同個網段, 
同時有192.168.2.1當路由, 
也同時有wireguard的 server eth0 (192.168.2.xxx) 在NAT下當路由S2S

我嘗試了搜尋兩張網卡的路由設定怎樣做(dual wan, 或是雙網卡)
網上有很多Site2Site的WireGuard設定 
但這些多為透過多台的wg0來組local networking
我一直沒有成功,  可能留待高手來解決

以下是我的試錯經驗:
在Server端, 如果要site2site的
route -n 確認一下路由路徑
千萬不要在Server端的wg0.conf AllowedIPs這段設置, 
應該用route add來新增
我的做法是
修改到default路由, 讓wg0取代default
所有的192.168.1.1流量走wg0
0.0.0.0/0流量走eth0

但用戶這裡我實際測試情況是
(192.168.2.30)需要指定靜態路由來穿透WireGuard的site2site
Windows和Mac沒有IT技能的用戶無法這樣手動添加
一定得登入WireGuard才會有Site2Site的功能, 不太合乎我的區網內的同事用戶情境 

而這台wg就爆炸了, 
因為脫離了上層路由器的gateway設定, 刪除了default路由後, 路由器認不到了
ssh失效就成了個磚頭
我有在回去本機添加192.168.2.1的gateway routing table, 但仍然無法訪問
一定要登入WireGuard or 在自己主機上添加靜態路由

可能的想法我嘗試如下
在Server上面設置RIP動態路由, 目前測試大部分服務是可以通
但ssh因為動態路由關係, 設置後沒多久就會斷線, 靜置沒有任何操作的話, 兩三秒就不能用了
因此最後的解方(?)
應該是找台路由器又能設置Wireguard來連線, 不是透過底下的服務器來NAT2NAT
所以....需要找能負荷多用戶的的OpenWRT或是pfSense, 效能不能太差的硬體.


這有一些坑




如果你用手機網路或是發現連線很慢.... 撇除水管寬度,或是中國網路長城等封包隔離 那你需要來設定MTU
MTU必須依照網路卡與ISP提供商的數值往下扣
MTU值太小會影響頻寬, 但當wg0的MTU與ISP廠商提供的不mapping時
就會造成封包大量遺失

TL;DR懶人包

MTU分片最小值為1280
如果你懶得算, 頻寬對你來說不是很重要,能連又穩定就好
那分片的MTU = 1280
就這樣設定吧...

Example. 
 GCP提供mtu 1460
 wg0 server端不設定mtu自動啟動後會剩下1380
 Client端中華電信 1440, 因此高於1380, 於是封包被分片, 多出來的就drop
 訪問Youtube就會出問題   


計算方式
  • 20-byte IPv4 header or 40 byte IPv6 header
  • 8-byte UDP header
  • 4-byte type
  • 4-byte key index
  • 8-byte nonce
  • N-wbyte encrypted data #256bit加密算法/8 = 32bytes
  • 16-byte authentication tag
 20+8+4+4+8+32+16= 92 
 wg0 1380 -92 = 1288  
 因此MTU值非常低, 1280設定在Client端的conf上面  
 
[Interface]
PrivateKey = MMMMMMMMMMMMMM=
Address = 172.16.10.5/24
DNS = 1.1.1.1, 8.8.8.8
MTU = 1280


連線YT等影片網站就能知道是不是有斷片封包

/* 註記, 每個人的網卡設定值也不同, 如果不同ISP廠商遠程辦公, 還會受到家用AP/路由器的MTU影響 */

2017/03/22

一個淺碟的SQA尋找出淺碟RD的騙局

我們家很愛畫些高大上的願望,
她們用OpenSource 的資源出了一個 物聯網編輯器
高大上的願望就有下面的工程師要去完成上面的事情

好der.
那麼就會有認真的工程師與鬼混的工程師來去補強上面的許願樹

2015到2017,
我看著這個物聯網的編輯器不停的火紅
火紅到要出錢才能買
但從2015就開始要的測試報告和使用說明書一樣還沒有

隨著業務往來越來越多的信
看到她們對於TCP socket處理的無奈和無知.
是說, 有沒人騙錢騙那麼大阿, 過了兩年還在畫唬爛
cc了主管, 這些主管還是不聞不問




是說Timeout就在settings.js裡面阿, 不用去V8找阿......


最後這個社會就又回到小不懂騙大不懂的共犯結構了
求真求知的真善美去哪了呢?

但淺碟的SQA不能說她知道了什麼,
那是擋人財路阿......

人走在江湖, 到了40歲只剩嘴泡靠杯救國了嗎?

繼續唱著巧虎的歌~~~
我們都是好朋友大家手牽手來做捧友~~~


2016/08/24

DS7804N-SN Hikvision Admin password reset



Step1. boot up NVR and Select here.



Step2. copy your Serial No. not RED selected corner.
like this "1620140821BBRR47336813WCVU"


P.S
Maybe your Serial Num like this....
"DS-7804N-SN1620140821BBRR47336813WCVU"
You need to try it.


Step3.  Link here to gen your secure code.



ps. make sure you boot up systems time is current, 
if not.
Please link to Internet got ntp server's date/time. (just boot up awhile.) 

Step4. copy your secure code to RED selected corner.


done.


Hope this work for you.

2016/06/05

婚 禮


沒有什麼長篇大論,只是這麼多的若干年下來
看自己的喜怒哀樂不少,
也看別人的悲歡離合不少

只是如人飲水,冷暖自知
看似甜蜜的生活其實過了兩三年就會消逝
期盼其實是很容易失望與落空的

我想起錦繡-宮本輝裡的內容
那都是要去執行的業
就算換個對象也還是會面對到這一切

如果是這樣,那就在該面對時面對這一切



是的
我們要結婚了


2014/11/16

中年轉業履歷準備心得


1.履歷
條列式的履歷很重要,面考官與需求者最好能一目了然
畢竟每天都會收到十幾封,履歷沒突出就很快沉到水裡
另外104的履歷部分,英文最好都要能準備一下

2.細節
自傳部分不需要提太多家裡和求學過程的事
細節應該放在你求職過程的過程
我說的過程是你未來想做些甚麼,求職中你做了那些學習和轉換跑道
為你每個階段的里程碑設定目標

3.面試
面試我其實算是蠻差的部分
我是講一回答三的人,和某些人不用講就自說自答有段差距
不過就是盡可能表現

4.英文面試
面試了八間公司,只有兩間有英文面試
不過就是很簡單的像念書時的英文自我介紹唸一段
最好先寫下來,準備個2-3分鐘

5.不要怕轉行
我接觸過軟體QA/硬體QA/生技/SW
每一次轉行其實都是不一樣的環境
但最好能講得出來你拼拼湊湊的最終目的是甚麼
轉換其實有一定的風險會被砍些薪資
我也是花了比別人晚的一些時間,來到接近標準的水平待遇

6.薪資談法
在我的履歷裡面,專科學歷常常是會被砍的第一個
我的作法是盡可能面試時帶成品
以及參與一些社群增加你在這個產業內的曝光度
或是你可以經營blog
總之,這個時代是你需要將自己當成一個品牌去經營的時代
擁有越多場所能證明你的品牌人氣
在這個方面就能擁有越多的主導優勢

7.大公司vs.小公司
小公司較能夠練技能,但大公司能過個水
我建議上,剛出社會盡可能去大公司先過水
第二第三份去小公司累積技能樹

8.投履歷和履歷的修改
其實很多公司的HR不太知道底下的職務需求是甚麼
這時若是很想要這份工作與這間公司
可以考慮修改成相對應這間公司的履歷
當然在修時也要看一下自己的能力吻合多少%
平時工作個一兩年我也建議試投一些測試自己水溫
我有一點太習慣和太安逸原有的工作,在轉換初期很擔心自己的未來

9.盡可能偷學其他單位的工作
充實自己是很重要的,練個功夫把功夫帶走
除了平常做自己的工作外
多和別的接口單位學點技能

10.世界工廠
這幾次面試下來發現工廠南移的趨勢
對岸的中文優勢已經不在
且有些新加坡/馬來西亞/泰國的工廠機會
但因為自己英文不好而沒被先過獵人頭的篩選
英文也不在是第一選項
偉創力的需求就開了泰文的選項出來
如果有可能的話,再精進自己技能的同時
最好能準備一下第二第三語言能力

以上,
祝大家找工作都能一切順利

2014/06/04

[懶人操作] TeraTerm 處理console指令

[懶人操作] TeraTerm 處理console指令


今天看著我們家的代工廠生產些非我們自己的產品
產品的內容也是u-boot + Tiny Linux
看了它們刷barcode一行一行做測試時
我跟它們提了這也可以用TeraTerm寫Tcl
用marco跑自動化,不會很難~

大家也可以來試看看
如果你需要console又非Linux base的環境時
需要多次輸入大量的command或多台機器時的可以用這樣的語法(?)
p.s 基本上我覺得這簡單到不是程式語言了.....

====程式開始====

connect '/c=3 /baud=115200'
; C=3 是com port3 ,baud rate =115200

timeout=200
; 與下面wait合用,等待字串, 200 秒後timeout

wait "login:"
sendln  "root" #13

;等待login,等待到了"login:" send出root + enter
;(其實sendln就會自帶enter了)
pause 3
; Teraterm有時仍有些bug,若你沒pause的話,字串可能送不完全
;最好是每次送出時都pause一下,若沒送好就調整一下pause的時間
;建議還是使用timeout > wait > sendln > pause的步驟比較安全
wait "password"
sendln "123456789" #13
pause 3
;等待password送出password
;注意一下這邊的wait使用上面的timeout=200
;另外在多工情況下,teraterm有bug會使用到其他的timeout
;最好在使用過程中做不一樣的pause時間
;或是多寫個bat檔案中間用ping區隔開來
;start "" "C:\teratern\ttermpro.exe" /c=3 /m=C:\TTL\tutorial.ttl
; ping -n 5 127.0.0.1
; start "" "C:\teratern\ttermpro.exe" /c=4 /m=C:\TTL\tutorial.ttl
;以上是大概的範例
;其他運用或執行檔案請在自行參考公司的測試程式擴充

2014/01/15

我不知道,然後把責任丟給別人

出了社會工作也邁向十年
現在的工作內容五花八門
如果用Diablo的技能樹來形容
我現在大概點了三頁

這三頁裡面有一頁是Linux Script和Dos的auto execution
還有一頁關於生產的進銷存
最後的一頁是HW的block Diagram和Mechnical的組裝

公司裡面有不少專精的同事
也有幾個在各種領域都很優秀的同事
當然也有擺爛總是不做事了同事

最常和我Co-Work的同事是個生產線上的SW
他常常丟出一個這樣的問題
"我看到Register了,但是他可以幹嘛,我要用什麼tool去trigger他?"
"我看不懂block diagram,我怎麼知道他tracing走哪裡...."

我其實也不太知道
但我很少會丟上面的問題給別人
大部份就是回家把問題丟給Google ,自己多try幾次,把register丟進去看看反映出來什麼?

過了一年後
他還是丟給其他人一樣的問題
而其他覺得厭煩的人,就會去找一個能要到答案或是知道答案在哪裡的人了

最近又到了要寫Role & Reliability 和KPI了
老實說我不太曉得要寫什麼
我翻翻去年和前年的規劃,都是期許自己往ME機構的方向點技能樹
畫畫Autocad,研究slioworks

但這兩年很明顯的,我漸漸的都在往軟體工程師的方向生長...
我的名片上印著DVT
部門長官看我覺得是個PE
EE/ME 覺得我是SE
客戶看我是個FAE

我不曉得我是什麼 R&R我寫不出來
我只看到公司哪裡有個洞,就看誰最適合填進去就好
我對自己也是這樣,能吃就吃下

時間過了四個月
現在再回頭補一下自己這篇文章
你說要叫自己甚麼
也許該叫NPI "New Product Introduction"
或是製造生產線的MPM.

薪水依然沒增加
每天的工作只有越來越多,
現在還多了Sliver Label的繪圖

說真的忙不忙,我都覺得還好
可是當你看到周圍的人東倒西歪閃得亂七八糟時覺得很難過
要說台灣為什麼低薪22K,
有時我覺得是自找的,
如果我是老闆,我也不想多付出給這樣推來推去的員工

台灣在全球化下越來越小
全球化會流動的東西:資本&勞工
這幾年下來,覺得成為全球化已經無可避免
看著這些推工作的人想著自己
危機感越來越強,
所以也試著去投履歷在Linkedin

效果其實還不差
打槍部分大多還是外語文
資歷與經歷已經沒多大問題了
我現在就只剩勤點些技能點數了

反正試過外面水溫
這條技能樹也快沒東西可以增加了
時間到了仍未能得到賞識或主官管職務
那就處理自己吧





2013/10/15

給親愛的阿蘇

走著走著
過去追求的阿蘇現在也嫁人了
身為過去的追求者
拍攝時也尚未和現在的女友在一起
當下有很多很多錯縱複雜的感覺

隔了接近半年
再交女友後心境寬廣些後
開始修整些照片

阿蘇,希望你會喜歡
祝你幸福~


RIV_0279

2013/10/07

耳機IE8 使用心得報告

用了兩年過保後的心得報告大概我也是第一人了

但我反而覺得東西的開箱文是這樣的開的
第一時間的開箱只是炫耀而已
真正的使用心得是長年累月的累積的


很多人給他取了個平價神兵的外號
但他是我第一隻破萬的耳機
說平我不知道哪裡平了

先細說我的耳機之路好了
(1) sennheiser sport 系列(型號忘掉了)
大概是PMX這系列的前幾代吧...
低音不錯,但是人聲的表線有點糟
另外在聽一些過重的metal表現也不太好 (ex. heaven shall burn)

(2)Demon C710
這在blog內文章有心得
我就不寫了
我連買兩次C710
如果說真要選個平價Metal神兵耳機
大概真的就是他了

(3)IE8
其實第三次上耳機就選IE8有點智障
因為我發現我現在用音樂的用量大多還是在家用主機和公司NB上面
隨便選個耳罩式的就好

可是他初在買這耳機時不是這樣想的
是想說自己可以無時無刻都享用好聽的音質

人就是那麼三八
有一好就沒兩好
當你買了這麼嬌貴的耳機後
其實你就會有所保留的不帶著去運動
ps. 不過後來我也還是帶著他去參加各種刮風下雨的路跑活動了....

心得
幹他媽的人聲表現好棒阿!!
這是我聽到第一次還沒run開的想法...
那時測試是Within Temptation

後來試用到現在
我的心得是
嗯,物有所值,但還沒到物超所值
的確在一個多面向的金屬人的耳朵裡面是個數一數二的好耳機

聽說他改版了
但改版後的IE80音質如何我就不知道了


====很多毛後的虎爛分格線====

推不推坑呢?
老實說到了35歲這年紀我會告訴你實用就好了....
是我應該會把錢省下來買C710加個便宜耳罩頂著用就好了...
或是把錢投進耳罩式的耳機裡

運動或是通勤時就用爛耳機偶爾聽聽就好了....

2013/10/06

閱讀 奇風歲月





看書的速度變慢了很多
終於看完了奇風歲月

書內的焦點多元,主軸線的偵探解謎大概僅占用1/5的篇幅
其餘像個孩子般地記敘生活中所發生的大小事
看起來像國中一二年級時會寫的日記或是傳記那樣

結局很好,書的內容也不錯
但就一個三十歲後的人來說,
並不太能夠完成心理上閱讀後的心靈滿足
作為青少年課後讀物倒是比較ok