想問使用wireguard的原因跟架構

813 views
Skip to first unread message

ianl...@gmail.com

unread,
Oct 2, 2021, 5:22:04 AM10/2/21
to NYCU NASA 課程討論區
助教好:

雖然功課做得出來,但我對為什麼要用wireguard來進行judge還不是很了解,所以想知道更多他架構上的細節

1. 依我目前查到的資料,wireguard應該是一個vpn tool,我比較不了解的是,使用wireguard而不是直接用ssh連線的理由是什麼
2. 依我們的configuration file看起來,我們做的應該是一個client端的設定,但我以為是助教那邊的機器來連我們這邊的機器,所以照理說不是應該是做server端的設定嗎
3. 另外我在其他說明上面看到很多都是private key跟public key要在client機器上自己生,所以我不太了解judge上面給我們private跟public key的意思是什麼,這兩個key是judge的key嗎?

在網路的部分涉略較少,請助教多多包涵
感謝助教

林熙哲

unread,
Oct 2, 2021, 6:00:07 AM10/2/21
to ianl...@gmail.com, NYCU NASA 課程討論區
同學您好

我覺得你問的問題很好,大概就我能力範圍內說明,不過因為我專業也不是網路,可能解說會沒那麼專業,也歡迎其他人幫忙補充想法

1. 使用 Wireguard 而不是 ssh 的原因

VPN 跟 SSH 本質上還是不同的,SSH 是讓管理員遠端操控某台機器,而 VPN 則是讓你的電腦和其他電腦可以構成一個虛擬的區域網路,舉個例子,如果你想跟同學玩 CS 1.6 的多人遊戲(希望我們還在同一個世代內QQ),但你們不在同一個區域網路內,用 SSH 是沒辦法做到的,需要用 VPN 才能做到。

通常 VPN 會用在像是跨國公司的運作上,或是遠距工作,公司的某些網路服務會限制只能內網使用,透過 VPN 的機制讓不同的辦公室接入同一個內網。

2. 設定檔與 Client、Server 的設定

因為以 VPN 的角色來說,是「你連入助教設定的區域網路」,當你連入助教的區域網路後,才會由 Online Judge 這邊發起 ssh / ftp 等等的連線到你的電腦

如果沒有 VPN 就直接做 SSH 連線也可以,但問題是
1. 大部分同學沒有固定 IP
2. 讓 ssh 在網路上裸奔(沒有防火牆、沒有管理)有一定程度的危險,網路上有很多無聊的人會寫程式自動掃描所有的 IP 去看看有沒有誰忘記升級 ssh / mysql / ftp ... etc 然後做自動化的攻擊,如果你把 ssh 開在網路上(listen 0.0.0.0、public ip),可以去看看 Log,就會發現有一堆來暴力嘗試密碼的記錄

不過更精確來說 Wireguard 比較沒有所謂的 Client-Server 架構,它比較是 Peer to Peer 的 VPN 架構。

3. 為什麼是 Online Judge 產生 private & public key

你的敘述正確,這邊延伸推薦可以去閱讀「非對稱加密」相關的文章,可以更瞭解 private key & public key 是什麼(可以解答你最後的問題)。

至於為什麼這次是 Online Judge 產生 Private key 然後在請你們複製走,我個人的想法是(這題不是我出的XD),單純為了簡化流程,正常流程是,你產生 private key & public key 後要把 public key 提供給我們,我們在進機器去設定,但如果 150 位同學都這樣做,助教會忙死,當然也可以寫成系統自動填入,但每次在伺服器填入新的 public key 都會需要重開 wireguard server,會讓正在線上的同學斷線,為了方便,所以改成助教這邊幫每位同學產生不同的 private key。

--
林熙哲 310551018

在 2021年10月2日 於 下午5:22:06, ianl...@gmail.com (ianl...@gmail.com) 寫下:

--
這是 Google 網路論壇針對「NYCU NASA 課程討論區」群組發送的訂閱通知郵件。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 nctunasa+u...@googlegroups.com
如要在網路上查看這項討論,請造訪 https://groups.google.com/d/msgid/nctunasa/7937c936-a966-445d-a16c-cc4749a2fc18n%40googlegroups.com

王景平

unread,
Oct 2, 2021, 6:13:52 AM10/2/21
to NYCU NASA 課程討論區
CS 1.6 時代的眼淚www
hslin 在 2021年10月2日 星期六下午6:00:07 [UTC+8] 的信中寫道:

ianl...@gmail.com

unread,
Oct 2, 2021, 8:07:19 AM10/2/21
to NYCU NASA 課程討論區

助教好:

感謝助教詳細的回答!
有感覺更了解了!

另外還有一個我一直疑惑很久的問題也想在這邊一併提出:
現在學校跟公司的網路應該都是有建防火墻來擋外面的人來亂ssh,另外也會要求同學要用vpn才可以連進學校網路
不過我自己平常實測的時候,不用ssh,好像用teamviewer之類的東西(我猜測是先包一層vpn再ssh)還是可以存取校內網路的
我的問題是:
如果我是公司網管人員,我應該要怎麼樣防止員工隨便開放權限讓別人用teamviewer或其他vpn軟體來操作公司的電腦?
(因為感覺好像這樣就有點繞過必須先用正規vpn連入學校內網才可以使用的規則了)
(我現在描述的狀況應該是跟助教架的內網是不太一樣,不過有聯想到就順便提出來,這個問題困擾我蠻久的XD)

抱歉這問題的描述可以有點不是很精確,我也不確定有沒有一些假設錯誤,不過很希望能得到助教的回答
感謝!

林熙哲

unread,
Oct 2, 2021, 12:06:41 PM10/2/21
to ianl...@gmail.com, NYCU NASA 課程討論區
我只好繼續來獻醜了,我真的不是網路專業,希望能有更專業的人來回XD

先回答你的問題本身,通常在公司如果要擋 Teamviewer,也會需要依靠防火牆,不過會需要依靠「更聰明的防火牆」,如果我沒有搞錯的話,Teamviewer 為了避免被防火牆擋,好像會走 80 Port,而一般的防火牆不會去擋 80 Port,因為一旦擋了 80 Port 代表你的瀏覽器所有用 http 上網的網站也都會進不去,Teamviewer 會藉著暗渡陳倉的方式來繞過防火牆。

不過新一代的防火牆都會有類似內容/行為偵測的功能,可以判斷這是屬於正常的 http 流量或其實是 Teamviewer 的流量。

另外一個不用防火牆的解法是,可以在公司的電腦上做好權限設定(例如 Apple MDM),直接限制使用公司電腦的員工不得安裝非經允許的軟體。

話說回來,其實 Teamviewer 不是 VPN + SSH 啦,SSH 只能做文字的遠端控制,而 Teamviewer 這種圖形界面的遠端控制,如果要舉例(不專業)的話比較接近 VNC、RDP 之類的技術,透過 Teamviewer 存取學校內網跟透過 VPN 其實也是完全不同的事情。透過 VPN 存取內網,比較像是在你的電腦上直接操作,但流量會傳送到某一台在學校的伺服器,然後在轉送出去,而透過 Teamviewer 其實是你直接「在學校的電腦上操作,只是透過監視器在你電腦上看到行為」

--
林熙哲 310551018

在 2021年10月2日 於 下午8:07:21, ianl...@gmail.com (ianl...@gmail.com) 寫下:

Lin Lee

unread,
Oct 3, 2021, 4:42:15 AM10/3/21
to NYCU NASA 課程討論區
雖然 TA 已經回了,不過我想來補幾句話:
這邊必須用 VPN 的原因不只是因為安全性要讓大家只能走內網連線,還有一個更大的原因就是因為現在大家網路基本上都有過 NAT,例如說你在電腦上下 ifconfig、ipconfig 看到的其實有可能是 192.168.X.X 或是 10.X.X.X,而非是一個 Public IP,這個原因就是因為 IPv4 的地址不夠用(像交大這麼財大氣粗一人一個 IP 的其實不太多 xD),所以會經過你的 AP、Wi-Fi分享器做 NAT,流量統一經過那台路由器發出去,並且把內網的 IP 變成外網你真正上網使用的 IP。
而經過 NAT 之後你要進行被動的連線(當 Server)就變得很困難,實務上可能要做 port forwarding(當你的路由器收到往特定 port 的封包,轉發給某個內網 IP),但考慮到方便性,更何況很多同學自己家裡主機就會佔用到那些 port,所以這樣子太麻煩了,更何況你可能是和別人一起共用同一個 Public IP。所以這邊提供一台 VPN Server,大家用主動連線連上 VPN Server,之後把連上 VPN Server 的這些機器全部串成一個內網,然後所有評測的流量都走 VPN,雖然看起來還是被動連線(judge 是 client 連你的 server),但實際上流量是走你主動連線的 VPN 通道,就可以避免剛剛提到的 NAT 之後被動連線不方便的問題。
若有錯誤或模糊的地方歡迎提出xD

hslin 在 2021年10月3日 星期日上午12:06:41 [UTC+8] 的信中寫道:

王景平

unread,
Oct 3, 2021, 6:28:01 AM10/3/21
to NYCU NASA 課程討論區
那我再來補幾句話:
NAT 的功用是讓 NAT 後面的數台機器對外共用同一個 IP,並且會給 NAT 後的機器一個內網 IP (如上面同學所說的192.168.X.X或10.X.X.X)。當 NAT 後的機器對外發送封包後,NAT 會記錄下發送封包的 private IP 以及 port,並指派一個新的 port (port 的選擇方式取決於 NAT 的設計),再把封包以 public IP : new port 的形式送到外網,之後一旦 NAT 收到要送給 new port 的封包,NAT 就會知道這個封包應該送給 private IP : port,因此如果是 NAT 後的機器主動連線的話,封包是可以被順暢地雙向傳輸的。
然而,如果是外網的機器想要主動連進來,會遇到兩個問題 : 
1. 他不知道應該送到哪個 port
2. NAT 不知道封包應該送到哪個 private IP : port
這兩個問題有一種解決方法叫 NAT Punchthrough,也就是 NAT 後的機器先送出封包到外網的一個 STUN Server (這個 Server 會回傳他看到的 IP port 來讓 NAT 後面的機器知道自己的 public IP port),讓 NAT 紀錄封包的 private IP : port 及其對應的 new port,如此一來外網機器就可以直接連線到 public IP : new port,NAT 也會順利把封包轉送到 private IP : port,而這也是 P2P 連線最普遍的做法。
然而為了資安考量,有些 NAT 是把 private IP, port, destination IP 映射到一個新的 port,並擋下不是來自 destination IP 的封包,也就是就算你是用同一個 port 來連線,只要目標 IP 不同,NAT 就指派一個新的 port (這部分可以去查 NAT 的種類,不同種類有不同行為),像是交大的 WIFI 就有類似行為。如果 NAT 是這些種類的,很明顯上面的方法就行不通 (因為用來連到 STUN Server 取得 public IP port 的 new port 只允許來自 STUN Server 的封包)。

因此,才會需要透過 VPN,如此一來 NAT 後的機器只需要跟 VPN Server 傳送封包 (就像正常的主動連線一樣),而 VPN Server 會把收到的封包轉送到對應的機器上 (像星型網路)。
leeli...@gmail.com 在 2021年10月3日 星期日下午4:42:15 [UTC+8] 的信中寫道:

林熙哲

unread,
Oct 3, 2021, 9:01:46 AM10/3/21
to 王景平, NYCU NASA 課程討論區
這時我說一句話就好了: 歡迎大家下學期來修 NA 哦🎉

ianl...@gmail.com

unread,
Oct 3, 2021, 11:28:03 AM10/3/21
to NYCU NASA 課程討論區
感謝大家這麼詳細的回答
學到超多
感激不盡!
Reply all
Reply to author
Forward
0 new messages