You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 181a610
Browse filesBrowse the repository at this point in the historyBrowse files
@@ -87,7 +89,9 @@ at any time with `--inventory PATH`.
87
89
The wizard supports an initial password or a separate SSH key. Bootstrap prompts for the password
88
90
without echoing it. The password is kept only in a private temporary connection file, removed after
89
91
Ansible exits. Verify the server fingerprint and add its key to `known_hosts` first. Load
90
-
passphrase-protected administrative keys with `ssh-add`.
92
+
passphrase-protected administrative keys with `ssh-add`; deriving or validating the public key
93
+
also uses `ssh-keygen -y`, which can ask for the passphrase separately. Unattended apply requires
94
+
this step to work without an interactive prompt.
91
95
92
96
`bootstrap` creates the administrator and sudo access, checks a fresh key-only login and `sudo -n`,
93
97
then disables root and password-based administrative login. It verifies access again after SSH
@@ -147,12 +151,14 @@ provide metadata for personalized delivery; the current `export` and `configs` c
147
151
`services.ssh.generate_profile` defaults to false and selects hosts for direct SSH profiles in
148
152
`export`, `configs` and the configuration API. Administrative SSH uses `admin` settings separately.
149
153
150
-
The wizard asks whether to publish direct SSH profiles. `enabled: false` also
154
+
The wizard asks whether to publish direct SSH profiles, defaulting to yes; omitting the field
155
+
in hand-written YAML still defaults to false. `enabled: false` also
151
156
disables an existing proxy: HTTPS stops GOST, HAProxy and the renewal timer; SSH
152
157
denies the `megaproxy` group and closes its sessions while preserving administrative
153
158
SSH. Keep the disabled service in YAML: an absent service is unmanaged. Firewall
154
159
records its own rules and revokes retired ports on the next full apply, preserving
155
-
other rules. An initial upgrade records existing configured ports before later changes.
160
+
other rules. An initial upgrade records existing configured ports before later changes;
161
+
older open ports already absent from inventory are not discovered automatically.
156
162
157
163
Only accounts whose primary group is `megaproxy` may be modified or removed;
158
164
new proxy accounts are created in that group. Administrative/bootstrap accounts,
@@ -167,7 +173,7 @@ Bootstrap verifies the new login before revoking the old key; mismatched public
167
173
and private keys are rejected.
168
174
169
175
Inventory and exports are replaced atomically with mode `0600`. Export validation
170
-
runs before replacing an existing file; unknown country codes become empty strings.
176
+
runs before replacing an existing file; country codes outside `[A-Z]{2}` become empty strings.
171
177
Port conflicts and HTTPS without routes are rejected before connecting to a host.
172
178
Docker cleanup only removes old GOST/Certbot images, without global prune operations.
173
179
HTTPS chains verify the exit certificate and hostname. CI uses a local CA to test
@@ -180,8 +186,9 @@ or unavailable exits, without external domains or ACME for these checks.
180
186
| true | false | Provision SSH proxy users; use the host only in declared jump pairs |
181
187
| false | any | Deny proxy access, close proxy sessions and omit profiles; jump pairs cannot reference this host |
182
188
183
-
Setting `enabled: false` skips the role; it does not remove previously provisioned accounts or
184
-
stop the server's SSH daemon. To revoke an account, use `remove-users` and `apply`.
189
+
Disabling SSH retains proxy accounts but denies their access; it does not stop the server's SSH
190
+
daemon. To delete an account, use `remove-users` and `apply`. A tagged apply must include
191
+
`firewall` to reconcile ports, for example `apply --tags ssh,https,firewall`.
185
192
186
193
```yaml
187
194
hosts:
@@ -244,8 +251,11 @@ first, then server-side chains.
244
251
HTTPS and SSH services and all chain/jump pairs require a nonblank `title`.
245
252
Names are read directly from inventory; no names are derived from host identifiers.
246
253
247
-
For country flags, start host identifiers with a two-letter country code followed by `_`, such as
248
-
`de_entry`and `us_exit`. Explicit HTTPS chain pairs supply the exit country in `country_code`.
254
+
Direct HTTPS country codes come from the first segment of the host identifier after removing
255
+
an optional `proxy_` prefix: `de_entry`and `proxy_de` yield `DE`. Identifiers such as `px-de`
256
+
yield an empty code. Codes must match two uppercase letters; no country registry is consulted.
257
+
Explicit HTTPS chain pairs require `country_code`; jump pairs can override the exit's inferred
258
+
code. Direct SSH and SOCKS5 profiles currently have an empty country code.
249
259
The code is a display hint; use the client connection test to check the observed exit country.
250
260
HTTPS and jump profile IDs use logical host/route identifiers and the account, so changing a
251
261
title or endpoint preserves those IDs. Direct SSH IDs also use the host and account. SOCKS5 exports still derive IDs from their names.
@@ -259,9 +269,9 @@ Set a knock host per HTTPS proxy using `services.https.probe_resistance.knock`:
259
269
probe_resistance:
260
270
enabled: true
261
271
mode: local_decoy
262
-
knock: [px-knock.jethelix.ru]
272
+
knock: [knock.example.com]
263
273
```
264
-
The first host becomes `browser.knockHost` in API and MegaProxy file profiles.
274
+
When probe resistance is enabled, the first host becomes `browser.knockHost` in API and MegaProxy file profiles.
265
275
Chain routes inherit the entry setting unless the pair overrides `probe_resistance`.
266
276
The setup wizard asks for the knock hostname when probe resistance is enabled.
267
277
Apply HTTPS settings to the proxy hosts and update the config API bundle after changing it.
@@ -276,6 +286,9 @@ Masked routes serve a static site using GOST's built-in loopback file server. A
276
286
Python script generates a random heading and abstract SVG once. Repeated `apply` runs keep the
277
287
site; remove `/opt/megaproxy/decoy/index.html` to regenerate it on the next `apply`.
278
288
The page includes `noindex,nofollow`; `/robots.txt` contains `User-agent: *` and `Disallow: /`.
289
+
Only `enabled` and `knock` currently affect masking. The inventory model accepts `mode`,
290
+
`status_code`and `site_title`, but they do not select another response mode
291
+
or control the generated site's title.
279
292
280
293
## HTTPS certificates and chains
281
294
@@ -300,7 +313,7 @@ clients to allow an invalid proxy certificate.
300
313
301
314
The default `.generated/configs` directory contains:
302
315
303
-
- `MegaProxy.json`: HTTPS, direct SSH for hosts with `services.ssh.generate_profile: true`, and explicitly configured SSH/HTTPS jump profiles;
316
+
- `MegaProxy.json`: HTTPS, enabled MASQUE/SOCKS5 transports, direct SSH for hosts with `services.ssh.generate_profile: true`, and explicitly configured SSH/HTTPS jump profiles;
304
317
- `FoxyProxy.json`: HTTPS profiles;
305
318
- `SuperProxy.txt`: HTTPS URLs with the Super Proxy v1 header;
306
319
- `ProxyList.txt`: URL-encoded HTTPS proxy URLs.
@@ -383,8 +396,10 @@ SNI routes remain usable through the HTTPS-only export formats. SSH jump profile
383
396
384
397
### Client limits and diagnostics
385
398
386
-
The Android client forwards TCP application traffic; general UDP and QUIC forwarding are not
387
-
implemented. SSH keys protected by a passphrase are unsupported. DNS, per-app routing, failover
399
+
HTTPS and SSH forward TCP; MASQUE and SOCKS5 also forward UDP in compatible Android builds.
400
+
Availability depends on the installed client release; see its
0 commit comments