歡迎來到 Mulvad VPN 用戶端應用程式原始碼儲存庫。這是 Mulvad VPN 服務的 VPN 用戶端軟體。有關該服務的更多信息,請訪問我們的網站 mullvad.net(也可以透過我們的洋蔥服務上的 Tor 訪問)。
該儲存庫包含該應用程式的桌面和行動版本的所有原始程式碼。對於桌面,這包括系統服務/守護程式 ( mullvad-daemon
)、圖形使用者介面 (GUI) 和命令列介面 (CLI)。 Android 應用程式使用相同的支援系統服務來實現隧道和安全,但在 android/. iOS 由駐留在 ios/ 中的完全獨立的實作組成。
我們的網站和 Github 上提供了適用於 macOS、Windows、Linux 和 Android 的建置和簽名版本。 Android 應用程式也可在 Google Play 和 F-Droid 上下載,iOS 版本則可在 App Store 上下載。
您可以在 Mulvad 的開源頁面上找到我們的程式碼簽署金鑰以及有關如何以加密方式驗證您的下載的說明。
這些是應用程式官方支援的作業系統及其版本。它可能適用於更多版本,但我們不會對這些版本進行測試,也無法保證品質或安全性。
作業系統/平台 | 支援的版本 |
---|---|
視窗 | 10 和 11 |
macOS | 最新的三個主要版本 |
Linux(Ubuntu) | 兩個最新的 LTS 版本和最新的非 LTS 版本 |
Linux(軟呢帽) | 尚未 EOL 的版本 |
Linux(Debian) | 11 及更新版本 |
安卓 | 8 及更新版本 |
iOS系統 | 15.0 及更高版本 |
在 Linux 上,我們使用 Gnome 桌面環境進行測試。該應用程式應該而且可能確實可以在其他桌面環境中運行,但我們不會定期測試這些。
這是一個包含跨平台應用程式功能的表格。這旨在反映 git 中最新程式碼的當前狀態,而不一定是任何現有版本。
視窗 | Linux | macOS | 安卓 | iOS系統 | |
---|---|---|---|---|---|
開放VPN | ✓ | ✓ | ✓ | ||
線衛 | ✓ | ✓ | ✓ | ✓ | ✓ |
抗量子隧道 | ✓ | ✓ | ✓ | ✓ | ✓ |
戴塔 | ✓ | ✓ | ✓ | ✓ | ✓ |
WireGuard 多跳 | ✓ | ✓ | ✓ | ✓ | |
基於 TCP 的 WireGuard | ✓ | ✓ | ✓ | ✓ | ✓ |
Shadowsocks 上的 WireGuard | ✓ | ✓ | ✓ | ✓ | |
基於 Shadowsocks 的 OpenVPN | ✓ | ✓ | ✓ | ||
分裂隧道 | ✓ | ✓ | ✓ | ✓ | |
自訂 DNS 伺服器 | ✓ | ✓ | ✓ | ✓ | ✓ |
內容攔截器(廣告等) | ✓ | ✓ | ✓ | ✓ | ✓ |
可選本地網路存取 | ✓ | ✓ | ✓ | ✓ | ✓* |
外部審核 | ✓ | ✓ | ✓ | ✓ | ✓ |
* 在目前實現的 iOS 上,本地網路始終可訪問
這個應用程式是一個保護隱私的 VPN 用戶端。因此,它不遺餘力地阻止流量洩漏。基本上所有設定都預設為更安全/私密的選項。如果需要,使用者必須明確允許更寬鬆的規則。有關應用程式阻止和允許的內容以及其操作方式的詳細信息,請參閱專用的安全文件。
此儲存庫包含建置應用程式所需的子模組。但是,其中一些子模組還具有其他非常大的子模組,不需要建置應用程式。因此,除非您想要 OpenSSL、OpenVPN 和其他一些專案的原始程式碼,否則您應該避免對儲存庫進行遞歸複製。相反,正常克隆存儲庫,然後獲取一級子模組:
git clone https://github.com/mullvad/mullvadvpn-app.git
cd mullvadvpn-app
git submodule update --init
在 Android、Linux 和 macOS 上,您也想遞歸地檢查wireguard-go子模組:
git submodule update --init --recursive --depth=1 wireguard-go-rs
有關為什麼需要這樣做的更多詳細資訊可以在wireguard-go-rs 箱中找到。
我們對main
分支上的每個提交以及發布標籤進行簽名。如果您想驗證您的結帳,您可以在 Mulvad 的開源頁面上找到我們的開發人員金鑰。
該儲存庫在dist-assets/binaries
中有一個 git 子模組。此子模組包含我們需要與應用程式捆綁的第三方程式碼的二進位檔案和建置腳本。如OpenVPN、Wintun等。
此子模組符合與該儲存庫相同的完整性/安全標準。每個合併提交都應該簽名。這個主儲存庫應該只指向二進位子模組的簽章合併提交。
有關該存儲庫的更多詳細信息,請參閱二進制子模組的自述文件。
請參閱建置說明以協助在桌面平台上建立應用程式。
要建立 Android 應用程序,請參閱 Android 說明。
要建立 iOS 應用程序,請參閱 iOS 說明。
有關如何製作新版本的說明,請參閱此內容。
TALPID_FIREWALL_DEBUG
- 幫助調試防火牆。根據平台執行不同的操作:
"1"
以將封包計數器新增至所有防火牆規則。pflog0
介面。"all"
以將日誌記錄新增至所有規則。"pass"
以將日誌記錄新增至允許資料包的規則。"drop"
以將日誌記錄新增至封鎖封包的規則中。 TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
- 強制守護程式不在 Linux 上設定src_valid_mark
配置。設定核心配置選項是因為否則嚴格的反向路徑過濾可能會阻止中繼流量到達守護程序。如果在將接收中繼流量的介面上rp_filter
設為1
,且src_valid_mark
未設定為1
,則守護程式將無法接收中繼流量。
TALPID_DNS_MODULE
- 允許更改用於 DNS 配置的方法。預設情況下,這是自動檢測的,但您可以將其設定為以下選項之一以選擇特定方法。
Linux
"static-file"
: 直接更改/etc/resolv.conf
文件"resolvconf"
:使用resolvconf
程式"systemd"
: 透過 DBus 使用 systemd 的resolved
服務"network-manager"
: 透過 DBus 使用NetworkManager
服務視窗
iphlpapi
:使用 IP 幫助器 APInetsh
:使用netsh
程式tcpip
:在登錄中設定 TCP/IP 參數TALPID_FORCE_USERSPACE_WIREGUARD
- 強制守護程式在 Linux 上使用 WireGuard 的使用者空間實作。
TALPID_DISABLE_OFFLINE_MONITOR
- 強制守護程式總是假定主機在線。
TALPID_NET_CLS_MOUNT_DIR
- 在 Linux 上,強制守護程式將net_cls
控制器安裝在指定目錄中(如果尚未安裝)。
MULLVAD_MANAGEMENT_SOCKET_GROUP
- 在 Linux 和 macOS 上,這會將管理介面 UDS 套接字的存取權限限制為指定群組中的使用者。這意味著只有該群組中的使用者才能使用 CLI 和 GUI。預設情況下,每個人都可以存取套接字。
MULLVAD_API_HOST
- 設定在 API 請求中使用的主機名稱。例如api.mullvad.net
。
MULLVAD_API_ADDR
- 設定要在 API 請求中使用的 IP 位址和連接埠。例如10.10.1.2:443
。
MULLVAD_API_DISABLE_TLS
- 對 API 請求使用純 HTTP。
MULLVAD_CONNCHECK_HOST
- 設定在連線檢查請求中使用的主機名稱。例如am.i.mullvad.net
。
從提升的 shell 中使用setx
:
setx TALPID_DISABLE_OFFLINE 1 /m
若要使變更生效,請重新啟動守護程式:
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
透過systemctl edit mullvad-daemon.service
編輯 systemd 單元檔案:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
若要使變更生效,請重新啟動守護程式:
sudo systemctl restart mullvad-daemon
使用launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
若要使變更生效,請重新啟動守護程式:
launchctl unload -w /Library/LaunchDaemons/net.mullvad.daemon.plist
launchctl load -w /Library/LaunchDaemons/net.mullvad.daemon.plist
MULLVAD_PATH
- 允許在開發模式下運行時使用mullvad-problem-report
工具更改資料夾路徑。預設為: /target/debug/
。MULLVAD_DISABLE_UPDATE_NOTIFICATION
- 如果設定為1
,則當有更新可用時將停用 GUI 通知。 $ npm run develop
- 開發啟用即時重新載入的應用程式$ npm run lint
- lint 程式碼$ npm run pack:
- 準備應用程式以便為您的平台分發。其中
可以是linux
、 mac
或win
$ npm test
- 運行測試不同的桌面環境對托盤圖示的顯示要求有所不同。如果未出現托盤圖標,請嘗試安裝以下軟體包之一:
libappindicator3-1
libappindicator1
libappindicator
如果您使用的是 GNOME,請嘗試安裝以下 GNOME Shell 擴充功能之一:
TopIconsFix
TopIcons Plus
electron-builder
的配置這個守護程序是用 Rust 實現的,並在多個 crate 中實現。建立最終守護程式二進位檔案的主要或頂級套件是mullvad-daemon
,它依賴其他套件。
一般來說,我們可以將守護程式分成兩部分,以talpid
開頭的 crate 和以mullvad
開頭的 crate。這些talpid
板條箱應該與穆爾瓦德的具體事物完全無關。例如,一個talpid
crate 不允許了解有關守護程序獲取 Mullvad 帳戶詳細資訊或下載 VPN 伺服器清單的 API 的任何資訊。 talpid
元件應被視為具有額外隱私和匿名保護功能的通用 VPN 用戶端。另一方面,名稱中帶有mullvad
的箱子則利用talpid
元件來建置安全且 Mullvad 特定的 VPN 用戶端。
對此儲存庫中的文件和程式碼中使用的一些常用單字的解釋。
mullvad-daemon
Rust 程式。這個無頭程序公開了一個管理接口,可用來控制守護進程mullvad
Rust 程序,它是 Mullvad VPN 應用程式的基於終端的前端。 Mulvad VPN 應用程式的各個元件寫入和讀取的檔案路徑列表
在 Windows 上,當程序作為系統服務執行時,變數%LOCALAPPDATA%
擴展為C:Windowssystem32configsystemprofileAppDataLocal
。
所有目錄路徑均在mullvad-paths
箱中定義並從中取得。
可以透過設定MULLVAD_SETTINGS_DIR
環境變數來變更設定目錄。
平台 | 小路 |
---|---|
Linux | /etc/mullvad-vpn/ |
macOS | /etc/mullvad-vpn/ |
視窗 | %LOCALAPPDATA%Mullvad VPN |
安卓 | getFilesDir() |
可以透過設定MULLVAD_LOG_DIR
環境變數來變更日誌目錄。
平台 | 小路 |
---|---|
Linux | /var/log/mullvad-vpn/ + systemd |
macOS | /var/log/mullvad-vpn/ |
視窗 | C:ProgramDataMullvad VPN |
安卓 | getFilesDir() |
可以透過設定MULLVAD_CACHE_DIR
環境變數來變更快取目錄。
平台 | 小路 |
---|---|
Linux | /var/cache/mullvad-vpn/ |
macOS | /Library/Caches/mullvad-vpn/ |
視窗 | C:ProgramDataMullvad VPNcache |
安卓 | getCacheDir() |
可以透過設定MULLVAD_RPC_SOCKET_PATH
環境變數來更改 RPC 位址檔案的完整路徑。
平台 | 小路 |
---|---|
Linux | /var/run/mullvad-vpn |
macOS | /var/run/mullvad-vpn |
視窗 | //./pipe/Mullvad VPN |
安卓 | getNoBackupFilesDir() |
GUI 具有為每個使用者配置的特定設定檔。該路徑在gui/packages/desktop/main/gui-settings.ts
檔案中設定。
平台 | 小路 |
---|---|
Linux | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
macOS | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
視窗 | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
安卓 | 存在於 Android 的logcat 中 |
有關圖示的信息,請參閱圖形自述文件。
有關如何處理語言環境和翻譯的說明可在此處找到。
有關 Android 應用程式的特定說明,請參閱此處。
Mulvad 已使用外部滲透測試公司來對該 VPN 應用程式進行安全審核。請在審計自述文件中閱讀有關它們的更多資訊。
版權所有 (C) 2024 Mulvad VPN AB
該程式是自由軟體:您可以根據自由軟體基金會發布的 GNU 通用公共授權(授權的第 3 版)或(由您選擇)任何更高版本的條款重新散佈和/或修改它。
有關完整許可協議,請參閱 LICENSE.md 文件
iOS 應用程式的原始程式碼與此儲存庫中的其他所有內容一樣均獲得 GPL-3 許可。但Apple App Store 上的分散式應用程式並未獲得GPL 許可,它屬於Apple App Store EULA 的管轄範圍。