ยินดีต้อนรับสู่แหล่งเก็บซอร์สโค้ดของแอปไคลเอ็นต์ Mullvad VPN นี่คือซอฟต์แวร์ไคลเอ็นต์ VPN สำหรับบริการ Mullvad VPN สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบริการนี้ โปรดเยี่ยมชมเว็บไซต์ mullvad.net ของเรา (เข้าถึงได้ผ่าน Tor บนบริการหัวหอมของเราด้วย)
พื้นที่เก็บข้อมูลนี้มีซอร์สโค้ดทั้งหมดสำหรับแอปเวอร์ชันเดสก์ท็อปและมือถือ สำหรับเดสก์ท็อป รวมถึงบริการระบบ/daemon ( mullvad-daemon
) ส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI) และส่วนต่อประสานบรรทัดคำสั่ง (CLI) แอป Android ใช้บริการระบบสำรองเดียวกันสำหรับอุโมงค์และการรักษาความปลอดภัย แต่มีส่วนหน้าเฉพาะใน android/ iOS ประกอบด้วยการใช้งานแบบสแตนด์อโลนโดยสมบูรณ์ซึ่งอยู่ใน iOS/
มีรุ่นที่สร้างและลงนามสำหรับ macOS, Windows, Linux และ Android พร้อมใช้งานบนเว็บไซต์ของเราและบน Github แอพ Android ยังมีให้บริการบน Google Play และ F-Droid และเวอร์ชัน iOS บน App Store
คุณสามารถค้นหาคีย์การลงนามโค้ดของเราตลอดจนคำแนะนำสำหรับวิธีตรวจสอบการดาวน์โหลดของคุณแบบเข้ารหัสได้ที่หน้าโอเพ่นซอร์สของ Mullvad
นี่คือระบบปฏิบัติการและเวอร์ชันที่แอปรองรับอย่างเป็นทางการ อาจใช้งานได้กับเวอร์ชันอื่นๆ อีกมากมาย แต่เราไม่ได้ทดสอบเวอร์ชันเหล่านั้นและไม่สามารถรับประกันคุณภาพหรือความปลอดภัยได้
ระบบปฏิบัติการ/แพลตฟอร์ม | รุ่นที่รองรับ |
---|---|
หน้าต่าง | 10 และ 11 |
ระบบปฏิบัติการ macOS | ทั้งสามรุ่นหลักล่าสุด |
ลินุกซ์ (อูบุนตู) | LTS สองรุ่นล่าสุดและรุ่นล่าสุดที่ไม่ใช่ LTS |
ลินุกซ์ (เฟโดร่า) | เวอร์ชันที่ยังไม่ EOL |
ลินุกซ์ (เดเบียน) | 11 และใหม่กว่า |
หุ่นยนต์ | 8 และใหม่กว่า |
ไอโอเอส | 15.0 และใหม่กว่า |
บน Linux เราทดสอบโดยใช้สภาพแวดล้อมเดสก์ท็อป Gnome แอปควรและอาจใช้งานได้กับ DE อื่นๆ แต่เราไม่ได้ทดสอบแอปเหล่านั้นเป็นประจำ
นี่คือตารางที่มีคุณสมบัติของแอปข้ามแพลตฟอร์ม สิ่งนี้มีจุดมุ่งหมายเพื่อสะท้อนถึงสถานะปัจจุบันของโค้ดล่าสุดในหน่วยคอมไพล์ โดยไม่จำเป็นต้องมีการเปิดตัวใดๆ ที่มีอยู่
หน้าต่าง | ลินุกซ์ | ระบบปฏิบัติการ macOS | หุ่นยนต์ | ไอโอเอส | |
---|---|---|---|---|---|
โอเพ่น VPN | |||||
WireGuard | |||||
อุโมงค์ต้านทานควอนตัม | |||||
ไดต้า | |||||
WireGuard มัลติฮอป | |||||
WireGuard บน TCP | |||||
WireGuard บน Shadowsocks | |||||
OpenVPN บน Shadowsocks | |||||
การแยกอุโมงค์ | |||||
เซิร์ฟเวอร์ 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
รายละเอียดเพิ่มเติมว่าเหตุใดจึงมีความจำเป็นสามารถพบได้ในลังสำหรับป้องกันสายไฟ
เราลงนามทุกคอมมิตในสาขา main
ตลอดจนแท็กการเผยแพร่ของเรา หากคุณต้องการยืนยันการชำระเงิน คุณสามารถค้นหาคีย์นักพัฒนาของเราได้ที่หน้าโอเพ่นซอร์สของ Mullvad
พื้นที่เก็บข้อมูลนี้มีโมดูลย่อยคอมไพล์ที่ dist-assets/binaries
โมดูลย่อยนี้มีไบนารีและสคริปต์บิลด์สำหรับโค้ดบุคคลที่สามที่เราจำเป็นต้องรวมเข้ากับแอป เช่น OpenVPN, Wintun เป็นต้น
โมดูลย่อยนี้สอดคล้องกับมาตรฐานความสมบูรณ์/ความปลอดภัยเดียวกันกับพื้นที่เก็บข้อมูลนี้ ทุกการกระทำที่ผสานควรได้รับการลงนาม และพื้นที่เก็บข้อมูลหลักนี้ควรชี้ไปที่การรวมที่ลงนามแล้วของโมดูลย่อยไบนารีเท่านั้น
ดู README ของโมดูลย่อยไบนารีสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับที่เก็บนั้น
ดูคำแนะนำในการสร้างเพื่อช่วยในการสร้างแอปบนแพลตฟอร์มเดสก์ท็อป
สำหรับการสร้างแอป Android โปรดดูคำแนะนำสำหรับ Android
สำหรับการสร้างแอป iOS โปรดดูคำแนะนำสำหรับ iOS
ดูคำแนะนำเกี่ยวกับวิธีการสร้างรุ่นใหม่
TALPID_FIREWALL_DEBUG
- ช่วยแก้ไขจุดบกพร่องไฟร์วอลล์ ทำสิ่งต่าง ๆ ขึ้นอยู่กับแพลตฟอร์ม:
"1"
เพื่อเพิ่มตัวนับแพ็คเก็ตให้กับกฎไฟร์วอลล์ทั้งหมดpflog0
"all"
เพื่อเพิ่มการบันทึกลงในกฎทั้งหมด"pass"
เพื่อเพิ่มการบันทึกลงในกฎที่อนุญาตแพ็กเก็ต"drop"
เพื่อเพิ่มการบันทึกลงในกฎที่บล็อกแพ็กเก็ต TALPID_FIREWALL_DONT_SET_SRC_VALID_MARK
- บังคับให้ daemon ไม่ตั้งค่าการกำหนดค่า src_valid_mark
บน Linux ตัวเลือกการกำหนดค่าเคอร์เนลได้รับการตั้งค่าเนื่องจากการกรองเส้นทางย้อนกลับที่เข้มงวดอาจทำให้การรับส่งข้อมูลรีเลย์เข้าถึงดีมอนได้ หาก rp_filter
ถูกตั้งค่าเป็น 1
บนอินเทอร์เฟซที่จะรับทราฟฟิกรีเลย์ และ src_valid_mark
ไม่ได้ตั้งค่าเป็น 1
daemon จะไม่สามารถรับทราฟฟิกรีเลย์ได้
TALPID_DNS_MODULE
- อนุญาตให้เปลี่ยนวิธีการที่จะใช้สำหรับการกำหนดค่า DNS ตามค่าเริ่มต้น ระบบจะตรวจพบสิ่งนี้โดยอัตโนมัติ แต่คุณสามารถตั้งค่าให้เป็นหนึ่งในตัวเลือกด้านล่างเพื่อเลือกวิธีการเฉพาะได้
ลินุกซ์
"static-file"
: เปลี่ยนไฟล์ /etc/resolv.conf
โดยตรง"resolvconf"
: ใช้โปรแกรม resolvconf
"systemd"
: ใช้บริการ resolved
ของ systemd ผ่าน DBus"network-manager"
: ใช้บริการ NetworkManager
ผ่าน DBusหน้าต่าง
iphlpapi
: ใช้ IP helper APInetsh
: ใช้โปรแกรม netsh
tcpip
: ตั้งค่าพารามิเตอร์ TCP/IP ในรีจิสทรี TALPID_FORCE_USERSPACE_WIREGUARD
- บังคับให้ daemon ใช้การใช้งานพื้นที่ผู้ใช้ของ WireGuard บน Linux
TALPID_DISABLE_OFFLINE_MONITOR
- บังคับให้ daemon ถือว่าโฮสต์ออนไลน์อยู่เสมอ
TALPID_NET_CLS_MOUNT_DIR
- บน Linux บังคับให้ daemon เมานต์คอนโทรลเลอร์ net_cls
ในไดเร็กทอรีที่ระบุ หากยังไม่ได้เมานต์
MULLVAD_MANAGEMENT_SOCKET_GROUP
- บน Linux และ macOS สิ่งนี้จะจำกัดการเข้าถึงซ็อกเก็ต UDS ของอินเทอร์เฟซการจัดการให้กับผู้ใช้ในกลุ่มที่ระบุ ซึ่งหมายความว่าเฉพาะผู้ใช้ในกลุ่มนั้นเท่านั้นที่สามารถใช้ CLI และ GUI ตามค่าเริ่มต้น ทุกคนสามารถเข้าถึงซ็อกเก็ตได้
MULLVAD_API_HOST
- ตั้งชื่อโฮสต์เพื่อใช้ในคำขอ API เช่น api.mullvad.net
MULLVAD_API_ADDR
- ตั้งค่าที่อยู่ IP และพอร์ตเพื่อใช้ในคำขอ API เช่น 10.10.1.2:443
.
MULLVAD_API_DISABLE_TLS
- ใช้ HTTP ธรรมดาสำหรับคำขอ API
MULLVAD_CONNCHECK_HOST
- ตั้งชื่อโฮสต์เพื่อใช้ในคำขอตรวจสอบการเชื่อมต่อ เช่น am.i.mullvad.net
ใช้ setx
จากเชลล์ที่ยกระดับ:
setx TALPID_DISABLE_OFFLINE 1 /m
เพื่อให้การเปลี่ยนแปลงมีผล ให้รีสตาร์ท daemon:
sc.exe stop mullvadvpn
sc.exe start mullvadvpn
แก้ไขไฟล์ systemd unit ผ่าน systemctl edit mullvad-daemon.service
:
[Service]
Environment = " TALPID_DISABLE_OFFLINE_MONITOR=1 "
เพื่อให้การเปลี่ยนแปลงมีผล ให้รีสตาร์ท daemon:
sudo systemctl restart mullvad-daemon
ใช้ launchctl
:
sudo launchctl setenv TALPID_DISABLE_OFFLINE_MONITOR 1
เพื่อให้การเปลี่ยนแปลงมีผล ให้รีสตาร์ท daemon:
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
- พัฒนาแอปโดยเปิดใช้งาน live-reload$ npm run lint
- รหัสผ้าสำลี$ npm run pack:
- เตรียมแอปสำหรับการเผยแพร่สำหรับแพลตฟอร์มของคุณ โดยที่
สามารถเป็น linux
, mac
หรือ win
$ npm test
- รันการทดสอบ ข้อกำหนดสำหรับการแสดงไอคอนถาดจะแตกต่างกันไปตามสภาพแวดล้อมเดสก์ท็อปที่แตกต่างกัน หากไอคอนถาดไม่ปรากฏขึ้น ให้ลองติดตั้งหนึ่งในแพ็คเกจเหล่านี้:
libappindicator3-1
libappindicator1
libappindicator
หากคุณใช้ GNOME ให้ลองติดตั้งส่วนขยาย GNOME Shell เหล่านี้:
TopIconsFix
TopIcons Plus
electron-builder
ภูตถูกนำไปใช้ใน Rust และถูกนำไปใช้ในหลายลัง ลังหลักหรือระดับบนสุดที่สร้างไบนารี daemon สุดท้ายคือ mullvad-daemon
ซึ่งจะขึ้นอยู่กับลังอื่นๆ
โดยทั่วไปเราสามารถมอง daemon ออกเป็นสองส่วน ลังที่ขึ้นต้นด้วย talpid
และลังที่ขึ้นต้นด้วย mullvad
กล่อง talpid
ไม่น่าจะเกี่ยวข้องกับสิ่งเฉพาะของ Mullvad เลย ลัง talpid
ไม่ได้รับอนุญาตให้รู้อะไรเกี่ยวกับ API ที่ daemon ดึงรายละเอียดบัญชี Mullvad หรือดาวน์โหลดรายชื่อเซิร์ฟเวอร์ VPN เป็นต้น ส่วนประกอบ talpid
ควรถูกมองว่าเป็นไคลเอนต์ VPN ทั่วไปที่มีคุณสมบัติความเป็นส่วนตัวและการไม่เปิดเผยตัวตนเป็นพิเศษ ในทางกลับกัน กล่องที่มีชื่อ mullvad
ใช้ประโยชน์จากส่วนประกอบ talpid
เพื่อสร้างไคลเอ็นต์ VPN ที่ปลอดภัยและเฉพาะสำหรับ Mullvad
คำอธิบายคำทั่วไปบางคำที่ใช้ในเอกสารประกอบและโค้ดในที่เก็บนี้
mullvad-daemon
Rust โปรแกรมที่ไม่มีส่วนหัวนี้จะแสดงอินเทอร์เฟซการจัดการที่สามารถใช้เพื่อควบคุม daemonmullvad
ซึ่งเป็นส่วนหน้าแบบเทอร์มินัลสำหรับแอป Mullvad VPN รายการเส้นทางไฟล์ที่เขียนและอ่านโดยส่วนประกอบต่างๆ ของแอป Mullvad VPN
บน Windows เมื่อกระบวนการทำงานเป็นบริการระบบ ตัวแปร %LOCALAPPDATA%
จะขยายเป็น C:Windowssystem32configsystemprofileAppDataLocal
เส้นทางไดเร็กทอรีทั้งหมดถูกกำหนดและดึงมาจากลัง mullvad-paths
ไดเร็กทอรีการตั้งค่าสามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม MULLVAD_SETTINGS_DIR
แพลตฟอร์ม | เส้นทาง |
---|---|
ลินุกซ์ | /etc/mullvad-vpn/ |
ระบบปฏิบัติการ macOS | /etc/mullvad-vpn/ |
หน้าต่าง | %LOCALAPPDATA%Mullvad VPN |
หุ่นยนต์ | getFilesDir() |
ไดเร็กทอรีบันทึกสามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม MULLVAD_LOG_DIR
แพลตฟอร์ม | เส้นทาง |
---|---|
ลินุกซ์ | /var/log/mullvad-vpn/ + systemd |
ระบบปฏิบัติการ macOS | /var/log/mullvad-vpn/ |
หน้าต่าง | C:ProgramDataMullvad VPN |
หุ่นยนต์ | getFilesDir() |
ไดเร็กทอรีแคชสามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม MULLVAD_CACHE_DIR
แพลตฟอร์ม | เส้นทาง |
---|---|
ลินุกซ์ | /var/cache/mullvad-vpn/ |
ระบบปฏิบัติการ macOS | /Library/Caches/mullvad-vpn/ |
หน้าต่าง | C:ProgramDataMullvad VPNcache |
หุ่นยนต์ | getCacheDir() |
พาธแบบเต็มไปยังไฟล์แอดเดรส RPC สามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม MULLVAD_RPC_SOCKET_PATH
แพลตฟอร์ม | เส้นทาง |
---|---|
ลินุกซ์ | /var/run/mullvad-vpn |
ระบบปฏิบัติการ macOS | /var/run/mullvad-vpn |
หน้าต่าง | //./pipe/Mullvad VPN |
หุ่นยนต์ | getNoBackupFilesDir() |
GUI มีไฟล์การตั้งค่าเฉพาะที่กำหนดค่าสำหรับผู้ใช้แต่ละคน เส้นทางถูกตั้งค่าไว้ในไฟล์ gui/packages/desktop/main/gui-settings.ts
แพลตฟอร์ม | เส้นทาง |
---|---|
ลินุกซ์ | $XDG_CONFIG_HOME/Mullvad VPN/gui_settings.json |
ระบบปฏิบัติการ macOS | ~/Library/Application Support/Mullvad VPN/gui_settings.json |
หน้าต่าง | %LOCALAPPDATA%Mullvad VPNgui_settings.json |
หุ่นยนต์ | นำเสนอใน logcat ของ Android |
ดูกราฟิก README สำหรับข้อมูลเกี่ยวกับไอคอน
คำแนะนำสำหรับวิธีจัดการกับสถานที่และการแปลมีอยู่ที่นี่
สำหรับคำแนะนำเฉพาะสำหรับแอป Android โปรดดูที่นี่
Mullvad ได้ใช้บริษัททดสอบภายนอกเพื่อดำเนินการตรวจสอบความปลอดภัยของแอป VPN นี้ อ่านเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ได้ในการอ่านการตรวจสอบ
ลิขสิทธิ์ (C) 2024 Mullvad VPN AB
โปรแกรมนี้เป็นซอฟต์แวร์เสรี: คุณสามารถแจกจ่ายซ้ำและ/หรือแก้ไขได้ภายใต้เงื่อนไขของ GNU General Public License ตามที่เผยแพร่โดย Free Software Foundation ไม่ว่าจะเป็นเวอร์ชัน 3 ของใบอนุญาต หรือ (ตามตัวเลือกของคุณ) เวอร์ชันที่ใหม่กว่า
สำหรับข้อตกลงใบอนุญาตฉบับเต็ม โปรดดูไฟล์ LICENSE.md
ซอร์สโค้ดสำหรับแอป iOS นั้นมีลิขสิทธิ์ GPL-3 เช่นเดียวกับสิ่งอื่นๆ ในที่เก็บนี้ แต่แอปที่เผยแพร่บน Apple App Store ไม่ได้รับใบอนุญาต GPL แต่อยู่ภายใต้ EULA ของ Apple App Store