Mullvad VPN 클라이언트 앱 소스 코드 저장소에 오신 것을 환영합니다. Mullvad 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에서도 사용할 수 있습니다.
Mullvad의 오픈 소스 페이지에서 코드 서명 키와 다운로드를 암호화하여 확인하는 방법에 대한 지침을 찾을 수 있습니다.
이는 앱이 공식적으로 지원하는 운영 체제 및 버전입니다. 더 많은 버전에서 작동할 수 있지만 우리는 해당 버전을 테스트하지 않으며 품질이나 보안을 보장할 수 없습니다.
OS/플랫폼 | 지원되는 버전 |
---|---|
윈도우 | 10과 11 |
macOS | 세 가지 최신 주요 릴리스 |
리눅스(우분투) | 최신 LTS 릴리스 2개와 LTS가 아닌 최신 릴리스 |
리눅스(페도라) | 아직 EOL되지 않은 버전 |
리눅스(데비안) | 11 이상 |
기계적 인조 인간 | 8 이상 |
iOS | 15.0 이상 |
Linux에서는 Gnome 데스크탑 환경을 사용하여 테스트합니다. 앱은 다른 DE에서도 작동해야 하며 아마도 작동할 것입니다. 그러나 우리는 이를 정기적으로 테스트하지 않습니다.
다음은 플랫폼 전반에 걸친 앱 기능을 포함하는 표입니다. 이는 반드시 기존 릴리스가 아닌 git 최신 코드의 현재 상태를 반영하기 위한 것입니다.
윈도우 | 리눅스 | 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
브랜치의 모든 커밋에 서명합니다. 결제를 확인하려면 Mullvad의 오픈 소스 페이지에서 개발자 키를 찾을 수 있습니다.
이 저장소에는 dist-assets/binaries
에 git 하위 모듈이 있습니다. 이 하위 모듈에는 앱과 함께 번들로 묶어야 하는 타사 코드용 바이너리와 빌드 스크립트가 포함되어 있습니다. OpenVPN, Wintun 등
이 하위 모듈은 이 저장소와 동일한 무결성/보안 표준을 준수합니다. 모든 병합 커밋은 서명되어야 합니다. 그리고 이 기본 저장소는 바이너리 하위 모듈의 서명된 병합 커밋만 가리켜야 합니다.
해당 저장소에 대한 자세한 내용은 바이너리 하위 모듈의 README를 참조하세요.
데스크톱 플랫폼에서 앱을 빌드하는 데 도움이 필요하면 빌드 지침을 참조하세요.
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 구성에 사용될 방법을 변경할 수 있습니다. 기본적으로 이는 자동으로 감지되지만 아래 옵션 중 하나로 설정하여 특정 방법을 선택할 수 있습니다.
리눅스
"static-file"
: /etc/resolv.conf
파일을 직접 변경합니다."resolvconf"
: resolvconf
프로그램을 사용합니다."systemd"
: DBus를 통해 systemd의 resolved
서비스를 사용합니다."network-manager"
: DBus를 통해 NetworkManager
서비스를 사용합니다.윈도우
iphlpapi
: IP 도우미 API를 사용합니다.netsh
: 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
.
높은 쉘에서 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
- 린트 코드$ npm run pack:
- 플랫폼에 배포할 앱을 준비합니다. 여기서
linux
, mac
또는 win
일 수 있습니다.$ npm test
- 테스트 실행 트레이 아이콘을 표시하기 위한 요구 사항은 데스크탑 환경에 따라 다릅니다. 트레이 아이콘이 나타나지 않으면 다음 패키지 중 하나를 설치해 보십시오.
libappindicator3-1
libappindicator1
libappindicator
GNOME을 사용하는 경우 다음 GNOME 셸 확장 중 하나를 설치해 보세요.
TopIconsFix
TopIcons Plus
electron-builder
구성 데몬은 Rust로 구현되며 여러 상자에서 구현됩니다. 최종 데몬 바이너리를 구축하는 기본 또는 최상위 수준의 상자는 mullvad-daemon
이며 이는 다른 것에 의존합니다.
일반적으로 데몬은 talpid
로 시작하는 상자와 mullvad
로 시작하는 상자의 두 부분으로 나누어져 있습니다. talpid
상자는 Mullvad의 특정 사물과 전혀 관련이 없는 것으로 추정됩니다. 예를 들어 talpid
크레이트는 데몬이 Mullvad 계정 세부 정보를 가져오거나 VPN 서버 목록을 다운로드하는 API에 대해 아무것도 알 수 없습니다. talpid
구성 요소는 추가 개인정보 보호 및 익명성 보존 기능을 갖춘 일반 VPN 클라이언트로 간주되어야 합니다. 반면 이름에 mullvad
가 있는 상자는 talpid
구성 요소를 사용하여 안전하고 Mullvad 전용 VPN 클라이언트를 구축합니다.
이 저장소의 문서 및 코드에 사용되는 몇 가지 일반적인 단어에 대한 설명입니다.
mullvad-daemon
Rust 프로그램을 나타냅니다. 이 헤드리스 프로그램은 데몬을 제어하는 데 사용할 수 있는 관리 인터페이스를 노출합니다.mullvad
라는 Rust 프로그램입니다. 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/ + 시스템화 |
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 |
기계적 인조 인간 | Android의 logcat 에 존재 |
아이콘에 대한 자세한 내용은 그래픽 README를 참조하세요.
로케일 및 번역을 처리하는 방법에 대한 지침은 여기에서 찾을 수 있습니다.
Android 앱과 관련된 지침은 여기를 참조하세요.
Mullvad는 외부 침투 테스트 회사를 통해 이 VPN 앱의 보안 감사를 수행했습니다. 감사 Readme에서 이에 대해 자세히 알아보세요.
저작권 (C) 2024 Mullvad VPN AB
이 프로그램은 무료 소프트웨어입니다. 자유 소프트웨어 재단(Free Software Foundation)에서 발표한 GNU General Public License(라이센스 버전 3) 또는 (귀하의 선택에 따라) 이후 버전의 조건에 따라 재배포 및/또는 수정할 수 있습니다.
전체 라이센스 계약은 LICENSE.md 파일을 참조하세요.
iOS 앱의 소스 코드는 이 저장소의 다른 모든 것과 마찬가지로 GPL-3 라이선스를 받았습니다. 그러나 Apple App Store에 배포되는 앱은 GPL 라이선스가 아니며 Apple App Store EULA에 속합니다.