luci-app-wificalling-gateway: add package - #694
Conversation
|
The |
Per-device transparent Wi-Fi Calling gateway for OpenWrt / ImmortalWrt. Forwards selected LAN clients through a selected sing-box node (AnyTLS, Hysteria2, TUIC, VLESS Reality, VMess WebSocket) with one sing-box process and nftables TPROXY, while other clients keep the normal gateway or PassWall policy. Observes ePDG/IPsec UDP 500/4500 evidence and records handshake success/failure and sustained encrypted communication in an encrypted IMS activity log (toggleable from the Settings page). Dependencies: luci-base, sing-box, firewall4, kmod-nft-tproxy, kmod-nft-socket, ip-full, tcping. Tested on ImmortalWrt 24.10.6 (Redmi AX6S, aarch64_cortex-a53); i18n path, luci.mk LUCI_LC_ALIAS and dependencies are identical on ImmortalWrt 25.12. Credential-bearing files are written with mode 0600; raw import links are never logged. Signed-off-by: Smth Dagg <smthdagg@gmail.com>
3fa84d1 to
b3820ff
Compare
- Drop tcping dependency (not in feeds); make TCP probe optional. - VLESS/VMess: emit TLS block for non-Reality TLS; fix alter_id JSON. - Add security form field for VLESS; mask UUID in UI. - Check firewall exit status; add device delimiter guard. - firewall.sh: exit 0 on empty clients; remove unused monitor_interval. Signed-off-by: Smth Dagg <smthdagg@gmail.com>
- VLESS: auxiliary=$flow (not ${flow:-$alter_id}) so empty flow does
not emit "flow":"0" which sing-box rejects.
- VMess: TLS gated on security field (f[16]=="tls") in addition to SNI;
parseVmess reads raw.tls from the share link and sets security.
- firewall: on startup failure, call firewall.sh stop to clean up the
TPROXY table before aborting (prevents blackhole with no listener).
Signed-off-by: Smth Dagg <smthdagg@gmail.com>
nit fix: value('') rendered as a blank dropdown row; now value('', _('None')).
Signed-off-by: Smth Dagg <smthdagg@gmail.com>
- security: depends on vless AND vmess (preserves imported tls across edits) - tls(): omit server_name when empty (sing-box uses server address) - delimiter guard: add $flow to checked fields Signed-off-by: Smth Dagg <smthdagg@gmail.com>
…start Fix stale status page after device add/modify: clear both files at startup so the status page shows only current configuration, not leftover data from the previous run. Signed-off-by: Smth Dagg <smthdagg@gmail.com>
|
Pushed the round-4 review fixes (03dc7ae): keep monitor.state as the per-device baseline (clear display state only), extend the delimiter guard to all | -delimited fields, fall back to the WS Host for TLS server_name when SNI is empty, reject Security=reality on VMess, and clear status.json in stop_service. |
03dc7ae to
1d2405b
Compare
- init.d: stop truncating monitor.state on start (it is the monitor's per-device baseline; clearing it fabricated handshake_success events on the first tick after every restart). Only status.json is cleared. - init.d: extend the delimiter guard to every field interpolated into the | -delimited record (alpn, congestion, udp_mode, fingerprint, security, transport, path, pin_sha256). - init.d: also clear status.json in stop_service for the stopped case. - compiler.sh: when sni (f[7]) is empty, fall back to the WS Host (f[19]) as server_name for VLESS and VMess; the TLS decision itself still uses the original sni so plain ws stays cleartext. - overview.js: reject Security = reality on VMess (no compiler arm). Signed-off-by: Smth Dagg <smthdagg@gmail.com>
1d2405b to
dbabc36
Compare
- compiler: trojan outbound (password + TLS); wireguard endpoint form for sing-box >= 1.11 and legacy outbound for 1.10.x, selected from the installed sing-box version at service start (the legacy wireguard outbound was removed in 1.13.0) - LuCI node form: wireguard private key / local address / reserved / MTU - import: trojan:// and wg:// share links (Clash Meta / sing-box style) - node-health: tcping fallback for trojan (TCP-based) - i18n: new strings with Simplified Chinese translations Signed-off-by: Smth Dagg <smthdagg@gmail.com>
3227966 to
5ee9f14
Compare
|
Pushed Note: the |
|
Closed in favor of upstream PR. The code will be merged back once upstream accepted it. |
|
Pushed DHCP lease auto-management (1.7.0):
|
|
Same modal fix as the openwrt/luci PR: DHCP binding state now renders in the device policy edit modal (previously |
|
Same review-fix batch as the openwrt/luci PR: dhcp-host name sanitization (spaces/commas/quotes would make dnsmasq reject the host line), wireguard required/numeric validation with node-specific errors, wg:// base64 '+' restore, lease file read from UCI, local declarations, po re-sort. 48/48 tests pass. |
|
Same update as the openwrt/luci PR: sustained traffic events are now marked as likely_call (inferred, never decoded); docs explain DHCP static-binding rationale and the encrypted monitoring boundary. 49/49 tests pass. |
|
Hi @TianlingShen — this PR appears to have been closed without a comment. Could you let us know the reason (scope, review process, or something in the submission)? The package is actively maintained (v1.7.1): Trojan/WireGuard protocols, auto-managed DHCP static leases, and an encrypted-IMS activity log with call inference; all FormalityCheck jobs pass and the openwrt/luci counterpart PR (#8921) is open. Happy to restructure, squash, or re-submit as needed. |
|
Update: we've read the CONTRIBUTING guidance and understand now - immortalwrt/luci is a mirror of openwrt/luci, and normal luci applications should be submitted upstream at openwrt/luci (our PR #8921 is open there with CI green). We'll let that merge and ImmortalWrt will pick it up via the upstream sync. Thanks, and sorry for the noise on this repo. |
Description
LuCI application for per-device Wi-Fi Calling gateways: transparently routes selected LAN clients through a sing-box node (AnyTLS, Hysteria2, TUIC, VLESS Reality, VMess WebSocket, Trojan, WireGuard) with nftables TPROXY, observes ePDG/IPsec UDP 500/4500 evidence, and records handshake outcomes in an encrypted IMS activity log.
Key behaviors:
independentroutes through the node,follow_gatewayis not intercepted.wfc_-prefixed dnsmasq host entries from the live lease table (tolerates iOS rotating private Wi-Fi MACs); the device policy table shows the live binding state.anytls://,hy2://,tuic://,vless://,vmess://,trojan://,wg://parsed locally in the browser.tcpingfallback for TCP-based protocols when installed (no hard dependency).sing-box checkbefore startup; mode0600for credential-bearing files; Simplified Chinese catalog shipped.Exit-node note: TCP-based protocols (AnyTLS/VLESS/VMess/Trojan) are the reliable gateway exits; Hysteria2/TUIC (UDP/QUIC) "alive" only proves ICMP reachability.
How Has This Been Tested?
sh -n/node --check/git diff --checkclean.sing-box checkagainst real 1.10.0 / 1.11.7 / 1.12.0 / 1.13.18 binaries for both wireguard forms.Checklist