Bug 44895 - League Of Legends: Unable to log in if behind OpenWRT based router

旨在為 Unix-like 平台提供 Windows 應用程式相容層的 Wine,是一項更新相當頻繁的專案,而每一次的更新,幾乎都會包含大量的問題修正。雖然 DR 不時會利用 Wine 來做一些事情(例如最近在用 Wine 來玩某個 Windows 9x 年代的老遊戲)。不過對於其更新內容,其實 DR 通常都不會太過注意。

 

然而在好段時間前所發佈的 Wine 3.8 裡,有一項已修復的 Bug 卻成功吸住了 DR 的眼球,那就是 Bug 44895 - League Of Legends: Unable to log in if behind OpenWRT based router。由於情節看起來有些特別,所以或許值得在此記錄下來。

 

在該項 Bug 的郵件列表裡,最初是有使用者發現,如果路由器是使用 OpenWrt 作為韌體,則 Linux 客戶端上使用 Wine 來執行遊戲《英雄聯盟》(League of Legends,以下簡稱 LoL),將會發生無法登入伺服器的問題。但 Windows 客戶端並不會有此問題,同時若路由器是使用原廠韌體,則 Linux 客戶端也能夠順利登入。所以這項問題看起來既跟 OpenWrt 有關,也跟 Wine 有關。

 

使用者進一步研究後,發現 LoL 的伺服器在客戶端登入時並不接受分割的封包,因此 Windows 客戶端會在傳送較大的封包時加上 DF(Don't Fragment,不可分割)旗標。如果路由器的對外連線是使用 PPPoE,其 MTU(Maximum Transmission Unit,最大傳輸單元)為 1492,而客戶端網卡介面的 MTU 為 1500,則路由器將會在收到 DF 旗標時,回報並促使客戶端調低 MTU 值,以便送出未分割的封包。

 

然而由 Wine 所執行的 LoL,其封包並未帶有 DF 旗標,因此使得路由器會直接對封包進行分割,進而造成無法登入遊戲伺服器的結果。至於其它非 OpenWrt 的韌體,則可能是因為預設啟用了巨型訊框(jumbo frame),而避免了此問題。但無論如何,後來 Wine 的開發者便提供了修補程式,對封包加上 DF 旗標,藉此解決這項乍看之下有些奇怪的問題。

 

分類: