Skip to content

Commit f31b1d5

Browse files
authored
NYM-1103: Add SOCKS5 Proxy process. (#5078)
Initial working version. What's missing: - App configuration (enabled, listen port and list of excluded countries). At the moment this is all hard-coded to be enabled. - No support for updating the excluded countries while the SOCKS5 Proxy process is running. - No support for updating the GeoIP or domain data at runtime within the SOCKS5 Proxy process. This would include supporting additional countries other than CN.
1 parent 3215ead commit f31b1d5

62 files changed

Lines changed: 3091 additions & 209 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build-nym-vpn-core-deb.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: build-nym-vpn-core-deb
22
on:
33
pull_request:
4-
types: [opened]
4+
types: [ opened ]
55
paths:
66
- ".github/workflows/build-nym-vpn-core-deb.yml"
77
workflow_dispatch:
@@ -71,7 +71,8 @@ jobs:
7171
cache-key: ${{ matrix.arch }}
7272

7373
- name: Append timestamp if it's a dev version
74-
run: ./scripts/append-timestamp-to-version.sh nym-vpn-core/Cargo.toml ${{ steps.workspace-version.outputs.metadata }}
74+
run: ./scripts/append-timestamp-to-version.sh nym-vpn-core/Cargo.toml ${{
75+
steps.workspace-version.outputs.metadata }}
7576

7677
- name: Download wireguard-go artifacts
7778
uses: actions/download-artifact@v8

.github/workflows/build-nym-vpn-core-linux.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: build-nym-vpn-core-linux
22
on:
33
pull_request:
4-
types: [opened]
4+
types: [ opened ]
55
paths:
66
- ".github/workflows/build-nym-vpn-core-linux.yml"
77
workflow_dispatch:
@@ -70,7 +70,8 @@ jobs:
7070
subcommand: workspace.package.version --entry nym-vpn-core
7171

7272
- name: Append timestamp if it's a dev version
73-
run: ./scripts/append-timestamp-to-version.sh nym-vpn-core/Cargo.toml ${{ steps.workspace-version.outputs.metadata }}
73+
run: ./scripts/append-timestamp-to-version.sh nym-vpn-core/Cargo.toml ${{
74+
steps.workspace-version.outputs.metadata }}
7475

7576
- name: Download wireguard-go artifacts
7677
uses: actions/download-artifact@v8
@@ -98,6 +99,7 @@ jobs:
9899
mkdir ${{ env.UPLOAD_DIR_LINUX }}
99100
cp -vpr ${{ env.SRC_BINARY }}/nym-vpnc ${{ env.UPLOAD_DIR_LINUX }}
100101
cp -vpr ${{ env.SRC_BINARY }}/nym-vpnd ${{ env.UPLOAD_DIR_LINUX }}
102+
cp -vpr ${{ env.SRC_BINARY }}/nym-socks5-proxy ${{ env.UPLOAD_DIR_LINUX }}
101103
cp -vpr ${{ env.SRC_BINARY }}/nym-diagnostic ${{ env.UPLOAD_DIR_LINUX }}
102104
103105
- name: Upload artifacts

.github/workflows/build-nym-vpn-core-windows.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: build-nym-vpn-core-windows
22
on:
33
pull_request:
4-
types: [opened]
4+
types: [ opened ]
55
paths:
66
- ".github/workflows/build-nym-vpn-core-windows.yml"
77
workflow_dispatch:
@@ -32,7 +32,7 @@ jobs:
3232

3333
build-windows:
3434
if: github.actor != 'dependabot[bot]'
35-
needs: [build-wireguard-go-windows, build-winfw-windows]
35+
needs: [ build-wireguard-go-windows, build-winfw-windows ]
3636
runs-on: custom-windows-11
3737
outputs:
3838
UPLOAD_DIR_WINDOWS: ${{ env.UPLOAD_DIR_WINDOWS }}
@@ -123,6 +123,7 @@ jobs:
123123
mkdir ${{ env.UPLOAD_DIR_WINDOWS }}
124124
cp -vpr ${{ env.SRC_BINARY }}/nym-vpnc.exe ${{ env.UPLOAD_DIR_WINDOWS }}
125125
cp -vpr ${{ env.SRC_BINARY }}/nym-vpnd.exe ${{ env.UPLOAD_DIR_WINDOWS }}
126+
cp -vpr ${{ env.SRC_BINARY }}/nym-socks5-proxy.exe ${{ env.UPLOAD_DIR_WINDOWS }}
126127
cp -vpr ${{ env.SRC_BINARY }}/nym-diagnostic.exe ${{ env.UPLOAD_DIR_WINDOWS }}
127128
cp -vpr ${{ env.LIBS_PATH }}/libwg.dll ${{ env.UPLOAD_DIR_WINDOWS }}
128129
cp -vpr ${{ env.WINFW_PATH }}/winfw.dll ${{ env.UPLOAD_DIR_WINDOWS }}

.pkg/linux/install

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ app_deb="nym-vpn-app_${app_version}_amd64.deb"
157157
target_appimage="NymVPN.AppImage"
158158
core_archive="nym-vpn-core-v${vpnd_version}_linux_x86_64.tar.gz"
159159
vpnd_bin="nym-vpnd"
160+
socks5_proxy_bin="nym-socks5-proxy"
160161
vpnd_service="nym-vpnd.service"
161162
vpnd_deb="nym-vpnd_${vpnd_deb_ver}_amd64.deb"
162163
units_dir="/usr/lib/systemd/system"
@@ -333,6 +334,7 @@ download_vpnd_raw() {
333334
log " ${B_GRN}Unarchiving$RS nym-vpnd"
334335
tar -xzf "$core_archive"
335336
mv "${core_archive%.tar.gz}/$vpnd_bin" $vpnd_bin
337+
mv "${core_archive%.tar.gz}/$socks5_proxy_bin" $socks5_proxy_bin
336338
_popd
337339
}
338340

@@ -389,7 +391,7 @@ sanity_check() {
389391

390392
files_check=()
391393
if [ "$_vpnd" == 0 ]; then
392-
files_check+=("$install_dir/$vpnd_bin" "$units_dir/$vpnd_service")
394+
files_check+=("$install_dir/$vpnd_bin" "$install_dir/$socks5_proxy_bin" "$units_dir/$vpnd_service")
393395
fi
394396
if [ "$_app" == 0 ]; then
395397
files_check+=("$install_dir/$target_appimage" "$desktop_dir/nym-vpn.desktop" "$icons_dir/nym-vpn.svg")
@@ -506,12 +508,14 @@ install_app_deb() {
506508
install_vpnd_raw() {
507509
log " ${B_GRN}Installing$RS nym-vpnd"
508510
sudo install -o "$(id -u)" -g "$(id -g)" -Dm755 "$temp_dir/$vpnd_bin" "$install_dir/$vpnd_bin"
511+
sudo install -o "$(id -u)" -g "$(id -g)" -Dm755 "$temp_dir/$socks5_proxy_bin" "$install_dir/$socks5_proxy_bin"
509512

510513
log " ${B_GRN}Installing$RS systemd service"
511514
sudo install -Dm644 "$temp_dir/$vpnd_service" "$units_dir/$vpnd_service"
512515

513516
log " ${B_GRN}Installed$RS files"
514517
log " ${I_YLW}$(tilded "$install_dir/$vpnd_bin")$RS"
518+
log " ${I_YLW}$(tilded "$install_dir/$socks5_proxy_bin")$RS"
515519
log " ${I_YLW}$(tilded "$units_dir/$vpnd_service")$RS"
516520
}
517521

@@ -640,6 +644,7 @@ _uninstall_raw() {
640644
files+=(
641645
"$xdg_bin_home/nym-vpnd"
642646
"/usr/bin/nym-vpnd"
647+
"/usr/bin/nym-socks5-proxy"
643648
"/usr/lib/systemd/system/nym-vpnd.service"
644649
"/etc/nym/nym-vpnd.toml"
645650
)

nym-vpn-app/docs/build.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ They have to be placed in the `src-tauri` directory, and present during build
3131
time.\
3232
The required files are:
3333

34-
- the daemon binary `nym-vpnd.exe`
34+
- the daemon binary `nym-vpnd.exe` and socks5 proxy `nym-socks5-proxy.exe`.
3535
- its dlls `libwg.dll`, `winfw.dll`, `wintun.dll`
3636

3737
Depending on which version of vpnd you are targeting,\

nym-vpn-app/src-tauri/bundle/windows/installer.nsi

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -697,8 +697,9 @@ Section Install
697697
; Copy main executable
698698
File "${MAINBINARYSRCPATH}"
699699

700-
; Copy vpnd and libs
700+
; Copy vpnd, socks5-proxy and libs
701701
File "..\..\..\..\nym-vpnd.exe"
702+
File "..\..\..\..\nym-socks5-proxy.exe"
702703
File "..\..\..\..\libwg.dll"
703704
File "..\..\..\..\wintun.dll"
704705
File "..\..\..\..\winfw.dll"
@@ -837,6 +838,7 @@ FunctionEnd
837838
Function Cleanup
838839
Delete "$INSTDIR\${MAINBINARYNAME}.exe"
839840
Delete "$INSTDIR\nym-vpnd.exe"
841+
Delete "$INSTDIR\nym-socks5-proxy.exe"
840842
Delete "$INSTDIR\libwg.dll"
841843
Delete "$INSTDIR\wintun.dll"
842844
Delete "$INSTDIR\winfw.dll"
@@ -876,10 +878,10 @@ Section Uninstall
876878
; vpnd cleanup
877879
Call un.VpndUninstall
878880
Delete "$INSTDIR\nym-vpnd.exe"
881+
Delete "$INSTDIR\nym-socks5-proxy.exe"
879882
Delete "$INSTDIR\libwg.dll"
880883
Delete "$INSTDIR\wintun.dll"
881884
Delete "$INSTDIR\winfw.dll"
882-
883885
Delete "$INSTDIR\nymvpn-split-tunnel.sys"
884886
Delete "$INSTDIR\nymvpn-split-tunnel.inf"
885887
Delete "$INSTDIR\nymvpn-split-tunnel.cat"

nym-vpn-app/src-tauri/scripts/sign.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ function sign {
3636

3737
exe=$1
3838

39-
# If we are signing the Tauri app, then also sign the daemon.
39+
# If we are signing the Tauri app, then also sign these executables.
4040
if [[ "$exe" == *NymVPN.exe ]]; then
41-
# shellcheck disable=SC2043
42-
for additonal in "nym-vpnd.exe"; do
41+
for additonal in "nym-vpnd.exe" "nym-socks5-proxy.exe"; do
4342
sign "$additonal"
4443
done
4544
fi

nym-vpn-apple/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Envs/mainnet.env
6969

7070
NymVPND/nym-vpnd
7171
NymVPND/nym-setup
72+
NymVPND/nym-socks5-proxy
7273

7374
fastlane/report.xml
7475
fastlane/README.md

nym-vpn-apple/NymVPN.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
582C5F8E2C7654A800B678AE /* ConfigurationManager in Frameworks */ = {isa = PBXBuildFile; productRef = 582C5F8D2C7654A800B678AE /* ConfigurationManager */; };
1111
5879C2062C80A37200BAB142 /* TunnelSettingsConversions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5879C2052C80A37200BAB142 /* TunnelSettingsConversions.swift */; };
1212
58C957422F8E505C00FD0C81 /* NymVPND.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 58C9571F2F8E3F0C00FD0C81 /* NymVPND.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
13+
58E98AED2F92534300A120DF /* nym-socks5-proxy in Copy Files */ = {isa = PBXBuildFile; fileRef = 58E98AEB2F92533600A120DF /* nym-socks5-proxy */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
1314
58FF8CE32F8EADEA0037AC51 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 58FF8CDE2F8EADEA0037AC51 /* Assets.xcassets */; };
1415
58FF8CEC2F8EAF2F0037AC51 /* nym-setup in Copy Files */ = {isa = PBXBuildFile; fileRef = 58FF8CEA2F8EAF2F0037AC51 /* nym-setup */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
1516
58FF8CED2F8EAF2F0037AC51 /* nym-vpnd in Copy Files */ = {isa = PBXBuildFile; fileRef = 58FF8CEB2F8EAF2F0037AC51 /* nym-vpnd */; };
@@ -174,6 +175,7 @@
174175
dstPath = "";
175176
dstSubfolderSpec = 6;
176177
files = (
178+
58E98AED2F92534300A120DF /* nym-socks5-proxy in Copy Files */,
177179
58FF8CEC2F8EAF2F0037AC51 /* nym-setup in Copy Files */,
178180
58FF8CED2F8EAF2F0037AC51 /* nym-vpnd in Copy Files */,
179181
);
@@ -216,6 +218,7 @@
216218
/* Begin PBXFileReference section */
217219
5879C2052C80A37200BAB142 /* TunnelSettingsConversions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TunnelSettingsConversions.swift; sourceTree = "<group>"; };
218220
58C9571F2F8E3F0C00FD0C81 /* NymVPND.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NymVPND.app; sourceTree = BUILT_PRODUCTS_DIR; };
221+
58E98AEB2F92533600A120DF /* nym-socks5-proxy */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = "nym-socks5-proxy"; sourceTree = "<group>"; };
219222
58FF8CDE2F8EADEA0037AC51 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
220223
58FF8CDF2F8EADEA0037AC51 /* NymVPND.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NymVPND.entitlements; sourceTree = "<group>"; };
221224
58FF8CE02F8EADEA0037AC51 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -397,6 +400,7 @@
397400
58FF8CE02F8EADEA0037AC51 /* Info.plist */,
398401
58FF8CEA2F8EAF2F0037AC51 /* nym-setup */,
399402
58FF8CEB2F8EAF2F0037AC51 /* nym-vpnd */,
403+
58E98AEB2F92533600A120DF /* nym-socks5-proxy */,
400404
);
401405
path = NymVPND;
402406
sourceTree = "<group>";

nym-vpn-apple/Scripts/BuildCore.sh

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ else
7171
fi
7272

7373
# 3) Build macOS (produces upload/mac/nym-vpnd if macOS.mk has vpnd targets)
74-
make -f macOS.mk libwg nym-setup nym-vpnd rpc-swift-package RELEASE="${RELEASE}"
74+
make -f macOS.mk libwg nym-setup nym-vpnd nym-socks5-proxy rpc-swift-package RELEASE="${RELEASE}"
7575

7676
# 4) Copy NymVPNRpc (from nym-vpn-rpc-uniffi) → apple repo root
7777
RPC_SRC="${CORE_ROOT}/crates/nym-vpn-rpc-uniffi/NymVPNRpc"
@@ -93,29 +93,19 @@ else
9393
echo "[BuildCore] Skipping header flatten (Xcode ${XCODE_VER} < 26.4)"
9494
fi
9595

96-
# 5) Copy the universal nym-vpnd → apple Daemon
97-
VPND_SRC="${CORE_ROOT}/upload/mac/nym-vpnd"
96+
# 5) Copy binaries to apple Daemon folder
97+
VPND_SRC_DIR="${CORE_ROOT}/upload/mac"
9898
VPND_DEST_DIR="${APPLE_ROOT}/NymVPND"
99-
VPND_DEST="${VPND_DEST_DIR}/nym-vpnd"
100-
if [[ ! -f "${VPND_SRC}" ]]; then
101-
echo "[BuildCore][ERROR] ${VPND_SRC} not found. Make sure macOS.mk builds vpnd-universal."
102-
exit 1
103-
fi
10499
mkdir -p "${VPND_DEST_DIR}"
105-
cp -f "${VPND_SRC}" "${VPND_DEST}"
106-
chmod +x "${VPND_DEST}"
107-
echo "[BuildCore] Copied nym-vpnd → ${VPND_DEST}"
108-
109-
# 6) Copy the universal nym-setup → apple Daemon
110-
NYM_SETUP_SRC="${CORE_ROOT}/upload/mac/nym-setup"
111-
NYM_SETUP_DEST="${VPND_DEST_DIR}/nym-setup"
112-
if [[ ! -f "${NYM_SETUP_SRC}" ]]; then
113-
echo "[BuildCore][ERROR] ${NYM_SETUP_SRC} not found. Make sure macOS.mk builds nym-setup-universal."
114-
exit 1
115-
fi
116-
cp -f "${NYM_SETUP_SRC}" "${NYM_SETUP_DEST}"
117-
chmod +x "${NYM_SETUP_DEST}"
118-
echo "[BuildCore] Copied nym-setup → ${VPND_DEST}"
100+
for f in nym-vpnd nym-socks5-proxy nym-setup; do
101+
if [[ ! -f "${VPND_SRC_DIR}/${f}" ]]; then
102+
echo "[BuildCore][ERROR] ${VPND_SRC_DIR}/${f} not found. Make sure macOS.mk builds vpnd-universal."
103+
exit 1
104+
fi
105+
cp -f "${VPND_SRC_DIR}/${f}" "${VPND_DEST_DIR}"
106+
chmod +x "${VPND_DEST_DIR}/${f}"
107+
echo "[BuildCore] Copied ${f}${VPND_DEST_DIR}"
108+
done
119109

120110
# Print sccache stats
121111
if command -v sccache &>/dev/null; then

0 commit comments

Comments
 (0)