@harry-kp/vortix 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.1] - 2026-04-04
11
+
12
+ ### Fixed
13
+
14
+ - Detect missing `resolvconf` before WireGuard connect on Linux ([#186](https://github.com/Harry-kp/vortix/issues/186), [#187](https://github.com/Harry-kp/vortix/pull/187)) — Vortix now shows clear install instructions instead of cryptic wg-quick errors when DNS is configured but resolvconf isn't available on Arch/Fedora
15
+ - Add CLI dependency check to catch missing tools before connection attempts
16
+
17
+ ### Documentation
18
+
19
+ - Add comprehensive Arch Linux troubleshooting FAQ and distribution-specific guidance in README
20
+ - Add WireGuard configuration guide explaining AllowedIPs, cloud provider limitations, and routing best practices
21
+ - Add quick error reference table for common connection issues
22
+
23
+
24
+
10
25
  ## [0.2.0] - 2026-03-31
11
26
 
12
27
  ### Added
package/README.md CHANGED
@@ -66,11 +66,17 @@ If you use Vortix on Linux and hit a problem, please open an issue and include `
66
66
  | `curl` | Pre-installed | `apt install curl` | Telemetry and IP detection |
67
67
  | `openvpn` | `brew install openvpn` | `apt install openvpn` | OpenVPN sessions |
68
68
  | `wireguard-tools` | `brew install wireguard-tools` | `apt install wireguard-tools` | WireGuard sessions |
69
+ | `resolvconf` / `systemd-resolved` | N/A (uses native DNS) | `systemd-resolvconf` or `openresolv` | WireGuard DNS management (optional, needed if DNS in config) |
69
70
  | `iptables` or `nftables` | N/A (uses `pfctl`) | Pre-installed | Kill switch |
70
71
  | `iproute2` | N/A (uses `ifconfig`) | Pre-installed | Interface detection |
71
72
 
72
73
  > Vortix checks for missing tools at startup and shows a warning toast with install instructions.
73
74
 
75
+ **DNS tools note:** If your WireGuard profile includes a `DNS =` directive, Vortix will automatically detect and warn about missing DNS tools. Install accordingly:
76
+ - **Arch/Fedora (systemd-based):** `sudo pacman -S systemd-resolvconf` or `sudo dnf install systemd-resolved`
77
+ - **Debian/Ubuntu:** `sudo apt install systemd-resolved` (usually pre-installed)
78
+ - **Alpine/Void (OpenRC):** Vortix falls back to `/etc/resolv.conf` editing automatically
79
+
74
80
  ### Build dependencies (source installs only)
75
81
 
76
82
  - Rust 1.75+
@@ -80,20 +86,20 @@ If you use Vortix on Linux and hit a problem, please open an issue and include `
80
86
 
81
87
  **Ubuntu/Debian:**
82
88
  ```bash
83
- sudo apt install curl wireguard-tools openvpn iptables iproute2
89
+ sudo apt install curl wireguard-tools openvpn iptables iproute2 systemd-resolved
84
90
  ```
85
91
 
86
92
  **Fedora/RHEL:**
87
93
  ```bash
88
- sudo dnf install curl wireguard-tools openvpn iptables iproute
94
+ sudo dnf install curl wireguard-tools openvpn iptables iproute systemd-resolved
89
95
  ```
90
96
 
91
97
  **Arch Linux** (only needed for source builds — `pacman -S vortix` handles deps automatically):
92
98
  ```bash
93
- sudo pacman -S curl wireguard-tools openvpn iptables iproute2
99
+ sudo pacman -S curl wireguard-tools openvpn iptables iproute2 systemd-resolvconf
94
100
  ```
95
101
 
96
- > **DNS detection** uses `resolvectl` (systemd-resolved) as the primary method, with `nmcli` (NetworkManager) and `/etc/resolv.conf` as fallbacks. Non-systemd distros (Alpine, Void, Gentoo OpenRC) will use the `/etc/resolv.conf` fallback automatically.
102
+ > **DNS management:** Vortix uses `resolvconf` (via `systemd-resolvconf` or `openresolv`) to manage DNS when your WireGuard profile contains `DNS =`. On systemd distros (most modern Linux), this is automatic via systemd-resolved. Non-systemd distros (Alpine, Void, Gentoo OpenRC) will use `/etc/resolv.conf` editing as a fallback.
97
103
 
98
104
  ## Installation
99
105
 
@@ -398,6 +404,18 @@ ip_api_fallbacks = ["https://api.ipify.org", "https://icanhazip.com", "https://i
398
404
 
399
405
  ## Troubleshooting
400
406
 
407
+ ### Quick Reference: Common Errors
408
+
409
+ | Error Message | Cause | Solution |
410
+ |---------------|-------|----------|
411
+ | `Missing dependencies: resolvconf (systemd)` | WireGuard profile has DNS but `resolvconf` not installed | Run `sudo pacman -S systemd-resolvconf` (Arch) or `sudo dnf install systemd-resolved` (Fedora) |
412
+ | `iptables-restore: unable to initialize table` | Cloud kernel doesn't support iptables; profile uses `AllowedIPs = 0.0.0.0/0` | Change `AllowedIPs` to `10.0.0.0/8` or disable kill switch |
413
+ | `wg-quick: The config file must be a valid interface name` | Profile name > 15 characters | Rename: `vortix rename long-name short-name` |
414
+ | `Connection succeeded but no internet` | `AllowedIPs` doesn't include your target | Add target IP to `AllowedIPs` in config |
415
+ | `connection timed out` or `Connection refused` | Can't reach VPN endpoint | Check firewall/cloud provider port restrictions |
416
+
417
+ ### General Issues
418
+
401
419
  **Profiles missing after upgrade (Linux)**
402
420
 
403
421
  If you previously ran vortix with `sudo` and profiles were stored in `/root/.config/vortix/`, the app will offer a one-time migration prompt. Accept it to move your data to `~/.config/vortix/` under your real user account.
@@ -416,6 +434,222 @@ If config files are owned by root, fix ownership:
416
434
  sudo chown -R $(whoami) ~/.config/vortix/
417
435
  ```
418
436
 
437
+ ### Arch Linux & Distribution-Specific FAQ
438
+
439
+ #### Q: Connection fails with "Missing dependencies: resolvconf (systemd)"
440
+
441
+ **A:** This happens on Arch, Fedora, and NixOS when your WireGuard profile has DNS settings but `resolvconf` isn't installed. These distros don't include DNS management tools by default.
442
+
443
+ **Fix:**
444
+ ```bash
445
+ # Arch Linux (systemd-based)
446
+ sudo pacman -S systemd-resolvconf
447
+
448
+ # Fedora (systemd-based)
449
+ sudo dnf install systemd-resolved
450
+
451
+ # Debian/Ubuntu (should be pre-installed)
452
+ sudo apt install systemd-resolved
453
+ ```
454
+
455
+ Vortix will now automatically detect `resolvconf` and proceed with the connection. No restart needed.
456
+
457
+ #### Q: Connection fails with "iptables-restore: unable to initialize table"
458
+
459
+ **A:** Your system doesn't have the `ip_tables` kernel module. This typically happens on:
460
+ - **Cloud providers** (DigitalOcean, AWS Lambda, Google Cloud Run, etc.) that intentionally disable netfilter
461
+ - **Containers** with minimal kernel capabilities
462
+ - **Custom kernels** built without netfilter support
463
+
464
+ This is **not a Vortix issue** — it's a system limitation that affects all Linux VPN tools, specifically:
465
+ - **Vortix's kill switch** (requires iptables/nftables for firewall rules)
466
+ - **wg-quick's automatic routing** (when `AllowedIPs = 0.0.0.0/0` is set in the WireGuard config)
467
+
468
+ **Workaround 1: Disable the kill switch (doesn't help on cloud providers):**
469
+ ```bash
470
+ sudo vortix killswitch off
471
+ sudo vortix up your-profile
472
+ ```
473
+
474
+ This only works if your WireGuard profile doesn't use `AllowedIPs = 0.0.0.0/0`. If it does, wg-quick will still try to configure iptables.
475
+
476
+ **Workaround 2: Modify your WireGuard profile for cloud providers:**
477
+
478
+ If your profile has `AllowedIPs = 0.0.0.0/0` (route all traffic through VPN), wg-quick automatically configures firewall rules. On cloud providers, change it to a more restrictive setting:
479
+
480
+ ```ini
481
+ # ❌ This requires iptables (will fail on cloud providers)
482
+ AllowedIPs = 0.0.0.0/0
483
+
484
+ # ✅ This only routes VPN subnet (no iptables needed)
485
+ AllowedIPs = 10.0.0.0/8
486
+ ```
487
+
488
+ Edit your profile with `vortix show <profile> --raw` to see the current `AllowedIPs` setting.
489
+
490
+ **Verify if your system supports iptables:**
491
+ ```bash
492
+ modprobe ip_tables && echo "✓ Supported" || echo "✗ Not available on this kernel"
493
+ ```
494
+
495
+ **Best practice for cloud providers:**
496
+ If you need to route all traffic through the VPN on a cloud provider, you'll need an instance with a standard kernel (not a restricted cloud kernel). Alternatively, use a home server, dedicated host, or bare metal with full kernel support.
497
+
498
+ #### Q: How do I know what DNS resolver my system uses?
499
+
500
+ **A:** Run this to check which method Vortix will use:
501
+
502
+ ```bash
503
+ # Systemd (most modern Linux distros)
504
+ resolvectl status 2>/dev/null && echo "✓ Using systemd-resolved"
505
+
506
+ # NetworkManager
507
+ nmcli dev show 2>/dev/null | grep DNS && echo "✓ Using NetworkManager"
508
+
509
+ # Fallback check
510
+ cat /etc/resolv.conf | head -3
511
+ ```
512
+
513
+ Vortix automatically detects and respects your system's DNS setup.
514
+
515
+ #### Q: Can I use Vortix on non-systemd distros?
516
+
517
+ **A:** Yes, but with limitations on DNS management:
518
+ - **Arch, Fedora, Ubuntu, Debian** → Full support (systemd or alternatives available)
519
+ - **Alpine, Void, Gentoo (OpenRC)** → Vortix falls back to editing `/etc/resolv.conf` directly
520
+ - **NixOS** → Works, but DNS may require custom configuration
521
+
522
+ If you use a non-systemd distro and hit issues, please [open an issue](https://github.com/Harry-kp/vortix/issues) with `vortix report` output.
523
+
524
+ #### Q: Why does the connection succeed but DNS doesn't work?
525
+
526
+ **A:** If `vortix up` succeeds but you can't resolve domains, it means:
527
+
528
+ 1. **The VPN tunnel is active** (IP changing works)
529
+ 2. **DNS configuration failed** (resolvconf not working properly)
530
+
531
+ **Debug steps:**
532
+ ```bash
533
+ # Check if resolvconf is working
534
+ resolvconf --version
535
+
536
+ # Check active DNS servers
537
+ resolvectl status | grep -A5 "DNS Servers"
538
+
539
+ # Manually test DNS through the VPN
540
+ dig @8.8.8.8 google.com
541
+
542
+ # Check the system's resolv.conf symlink
543
+ ls -la /etc/resolv.conf
544
+ ```
545
+
546
+ If `/etc/resolv.conf` is not managed by systemd (not a symlink to `/run/systemd/`), you may need to install `systemd-resolvconf` or `openresolv`.
547
+
548
+ #### Q: WireGuard interface name is too long
549
+
550
+ **A:** Linux WireGuard interfaces have a 15-character name limit. If your profile name is longer, wg-quick will fail with "invalid interface name".
551
+
552
+ **Fix:** Rename your profile to something shorter:
553
+ ```bash
554
+ vortix rename my-very-long-profile-name work-vpn
555
+ ```
556
+
557
+ WireGuard interface names should contain only alphanumeric characters, hyphens, and underscores.
558
+
559
+ #### Q: How do I report a distro-specific issue?
560
+
561
+ **A:** Include this information when opening an issue:
562
+
563
+ ```bash
564
+ vortix report # Generates a complete report
565
+ uname -a # Kernel version
566
+ cat /etc/os-release # Distro info
567
+ systemctl --version # Init system
568
+ ```
569
+
570
+ Tested and supported Linux distros in CI: **Ubuntu 20.04/22.04**, **Fedora 40+**, **Arch Linux**. If you use a different distro and hit issues, that's valuable signal for the project.
571
+
572
+ ### WireGuard Configuration Guide
573
+
574
+ #### Understanding AllowedIPs
575
+
576
+ The `AllowedIPs` setting in your WireGuard config determines what traffic goes through the VPN:
577
+
578
+ ```ini
579
+ # Route ALL traffic through VPN (requires iptables/nftables for firewall rules)
580
+ AllowedIPs = 0.0.0.0/0 # ⚠️ May fail on cloud providers, containers
581
+
582
+ # Route only VPN subnet traffic (no special firewall rules needed)
583
+ AllowedIPs = 10.0.0.0/8 # ✅ Works everywhere, even cloud providers
584
+
585
+ # Route specific traffic only
586
+ AllowedIPs = 192.168.1.0/24 # ✅ Route only corporate network
587
+ ```
588
+
589
+ **Why this matters:**
590
+ - When `AllowedIPs = 0.0.0.0/0`, wg-quick automatically configures firewall rules via iptables/nftables
591
+ - Cloud providers (DigitalOcean, AWS Lambda, Google Cloud Run) disable iptables kernel modules
592
+ - Restrictive `AllowedIPs` avoids firewall configuration entirely
593
+
594
+ **Recommendation for cloud servers:**
595
+ If you're running Vortix on a cloud provider and need to route traffic through the VPN, use `AllowedIPs = 10.0.0.0/8` or another private subnet instead of `0.0.0.0/0`.
596
+
597
+ #### Common WireGuard Configuration Issues
598
+
599
+ **Issue: Connection succeeds but no internet access**
600
+
601
+ Check your `AllowedIPs` setting:
602
+ ```bash
603
+ vortix show your-profile --raw | grep AllowedIPs
604
+ ```
605
+
606
+ - If it's `10.0.0.0/8` or similar, only traffic to that subnet goes through VPN
607
+ - Add your target IP/subnet to `AllowedIPs` to route it through the tunnel
608
+ - Example: `AllowedIPs = 10.0.0.0/8, 192.168.0.0/16`
609
+
610
+ **Issue: Can't reach VPN server from cloud provider**
611
+
612
+ Some cloud providers block outbound UDP 51820 or other ports. Try:
613
+ ```bash
614
+ # Check if you can reach the endpoint
615
+ ping -c 1 138.197.3.155
616
+
617
+ # Test specific port (replace with your endpoint)
618
+ nc -zu 138.197.3.155 51820 && echo "✓ Port open" || echo "✗ Port blocked"
619
+ ```
620
+
621
+ If blocked, contact your cloud provider to allow WireGuard ports.
622
+
623
+ **Issue: DNS works but only for some domains**
624
+
625
+ This usually means:
626
+ 1. VPN DNS servers are configured but not all traffic routes through VPN
627
+ 2. Your system's DNS fallback is resolving some queries locally
628
+
629
+ Check if `DNS =` is in your config and matches your VPN provider's DNS servers.
630
+
631
+ #### Testing Your WireGuard Profile
632
+
633
+ After creating/importing a profile, test the configuration:
634
+
635
+ ```bash
636
+ # View the profile
637
+ vortix show my-profile --raw
638
+
639
+ # Check required fields
640
+ vortix show my-profile --raw | grep -E "^(PrivateKey|PublicKey|AllowedIPs|Endpoint|Address|DNS)"
641
+
642
+ # Expected output:
643
+ # PrivateKey = (base64)
644
+ # Address = 10.0.0.2/24
645
+ # Endpoint = 1.2.3.4:51820
646
+ # AllowedIPs = 10.0.0.0/8 (or 0.0.0.0/0)
647
+ # PublicKey = (base64)
648
+ # DNS = 8.8.8.8, 8.8.4.4 (optional)
649
+ ```
650
+
651
+ All fields above are required except `DNS` (optional).
652
+
419
653
  ## Roadmap
420
654
 
421
655
  See the [project board](https://github.com/users/Harry-kp/projects/6) for what's being explored. Have an idea? [Join the discussion](https://github.com/Harry-kp/vortix/discussions/34).
@@ -23,7 +23,7 @@
23
23
  "hasInstallScript": true,
24
24
  "license": "MIT",
25
25
  "name": "@harry-kp/vortix",
26
- "version": "0.2.0"
26
+ "version": "0.2.1"
27
27
  },
28
28
  "node_modules/@isaacs/balanced-match": {
29
29
  "engines": {
@@ -515,5 +515,5 @@
515
515
  }
516
516
  },
517
517
  "requires": true,
518
- "version": "0.2.0"
518
+ "version": "0.2.1"
519
519
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "artifactDownloadUrl": "https://github.com/Harry-kp/vortix/releases/download/v0.2.0",
2
+ "artifactDownloadUrl": "https://github.com/Harry-kp/vortix/releases/download/v0.2.1",
3
3
  "author": "Harry KP <harrykp@users.noreply.github.com>",
4
4
  "bin": {
5
5
  "vortix": "run-vortix.js"
@@ -100,7 +100,7 @@
100
100
  "zipExt": ".tar.xz"
101
101
  }
102
102
  },
103
- "version": "0.2.0",
103
+ "version": "0.2.1",
104
104
  "volta": {
105
105
  "node": "18.14.1",
106
106
  "npm": "9.5.0"