################################################################ ### ROUTER EGRESS STATUS ################################################################ INSTANCE=mgts-main INSTANCE_DIR=/opt/router-ops/instances/mgts-main EGRESS_YML=/opt/router-ops/instances/mgts-main/egress.yml MODE=READ_ONLY REMOTE_CHANGES=NO ################################################################ ### EXPECTED PROFILE SLOTS ################################################################ hmn_slot_1 iface=vpn1 table=201 fwmark=0x201 provider=hidemyname role=active weight=100 hmn_slot_2 iface=vpn2 table=202 fwmark=0x202 provider=hidemyname role=active weight=100 hmn_slot_3 iface=vpn3 table=203 fwmark=0x203 provider=hidemyname role=active weight=100 hmn_slot_4 iface=vpn4 table=204 fwmark=0x204 provider=hidemyname role=active weight=100 hmn_slot_5 iface=vpn5 table=205 fwmark=0x205 provider=hidemyname role=active weight=100 ################################################################ ### VM101 BASIC ################################################################ Wed Jul 8 09:55:27 UTC 2026 09:55:27 up 17:17, load average: 0.00, 0.00, 0.00 lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 95.165.105.4/20 fe80::be24:11ff:fe42:83cf/64 eth1 UP 10.200.0.2/24 fe80::be24:11ff:fe09:4e2c/64 eth2 UP 10.71.100.2/24 fe80::be24:11ff:fe4d:7a71/64 eth3 UP 10.201.0.2/24 fe80::be24:11ff:fec8:2ee1/64 vpn1 UNKNOWN 10.91.233.132/32 default via 95.165.96.1 dev eth0 proto static src 95.165.105.4 10.71.100.0/24 dev eth2 proto kernel scope link src 10.71.100.2 10.200.0.0/24 dev eth1 proto kernel scope link src 10.200.0.2 10.201.0.0/24 dev eth3 proto kernel scope link src 10.201.0.2 10.250.100.0/24 via 10.71.100.1 dev eth2 proto static 95.165.96.0/20 dev eth0 proto kernel scope link src 95.165.105.4 95.211.68.119 via 95.165.96.1 dev eth0 proto static 178.215.227.13 via 95.165.96.1 dev eth0 proto static 192.71.27.64 via 95.165.96.1 dev eth0 proto static 192.121.163.235 via 95.165.96.1 dev eth0 proto static 0: from all lookup local 10019: from all iif eth1 lookup 200 10020: from 10.200.0.0/24 lookup 200 32766: from all lookup main 32767: from all lookup default rc=0 ################################################################ ### LEGACY AUTOMATION FREEZE CHECK ################################################################ === crontab === # STEP_029C1_DISABLED * * * * * /usr/bin/vpn-egress-manager.sh >/dev/null 2>&1 # STEP_029C1_DISABLED 20 4 * * * /root/hmn/hmn-refresh-pool-cron.sh # STEP_029C1_DISABLED 7,22,37,52 * * * * /root/hmn/hmn-pool-low-watermark-check.sh run >/dev/null 2>&1 # STEP_029C1_DISABLED 5,35 * * * * /root/hmn/hmn-refresh-retry-cron.sh # STEP_029C1_DISABLED 10 3 * * * /root/hmn/hmn-clean-old-files.sh >/dev/null 2>&1 # STEP_029C1_DISABLED * * * * * /root/hmn/hmn-vpn-user-override.sh tick >/dev/null 2>&1 === hotplug iface === drwxr-xr-x 2 root root 4096 Jul 8 08:35 . drwxr-xr-x 10 root root 4096 Apr 20 11:42 .. -rw-r--r-- 1 root root 155 Jun 23 2025 00-netstate -rw-r--r-- 1 root root 498 Jun 23 2025 20-firewall === disabled hotplug files === /root/router-ops-disabled-hotplug/STEP_029C2_hotplug/99-vpn-egress-manager.disabled /root/router-ops-disabled-hotplug/STEP_029C2_hotplug/99-vpnin-policy-route.disabled === legacy processes === rc=0 ################################################################ ### EGRESS INTERFACES SAFE SUMMARY ################################################################ ### IFACE vpn1 --- UCI safe fields --- proto=amneziawg auto=0 disabled=0 addresses=10.91.233.132/32 hmn_role=active_spare_slot hmn_endpoint=178.215.227.13:44408 hmn_loaded_at=2026-07-06T17:07:53+00:00 --- ip addr --- vpn1 UNKNOWN 10.91.233.132/32 --- wg public/endpoints/handshake/transfer --- ### IFACE vpn2 --- UCI safe fields --- proto=amneziawg auto=0 disabled=0 addresses=10.86.108.200/32 hmn_role=active_spare_slot hmn_endpoint=192.121.163.235:42530 hmn_loaded_at=2026-07-08T06:15:47+00:00 --- ip addr --- --- wg public/endpoints/handshake/transfer --- ### IFACE vpn3 --- UCI safe fields --- --- ip addr --- --- wg public/endpoints/handshake/transfer --- ### IFACE vpn4 --- UCI safe fields --- --- ip addr --- --- wg public/endpoints/handshake/transfer --- ### IFACE vpn5 --- UCI safe fields --- --- ip addr --- --- wg public/endpoints/handshake/transfer --- ### IFACE vpn_user --- UCI safe fields --- proto=amneziawg auto=0 disabled=0 addresses=10.90.235.244/32 hmn_role=user_select_slot hmn_endpoint=37.235.54.96:38971 hmn_loaded_at=2026-07-06T17:41:02+00:00 --- ip addr --- --- wg public/endpoints/handshake/transfer --- ### IFACE vpn_test --- UCI safe fields --- proto=amneziawg auto=0 disabled=0 addresses=10.67.234.5/32 hmn_role=test_slot hmn_endpoint=192.71.27.64:40044 hmn_loaded_at=2026-07-08T04:31:40+00:00 --- ip addr --- --- wg public/endpoints/handshake/transfer --- rc=0 ################################################################ ### FIREWALL VPN_OUT / FORWARDINGS ################################################################ === firewall vpn-related === firewall.@zone[3].name='vpn_in' firewall.@zone[3].network='vpn_in' firewall.@zone[4].name='vpn_out' firewall.@zone[4].network='vpn1' 'vpn2' 'vpn_user' firewall.@rule[7].name='Allow-ICMP-from-vpn_in-to-router' firewall.@rule[7].src='vpn_in' firewall.@forwarding[0]=forwarding firewall.@forwarding[0].src='direct_in' firewall.@forwarding[0].dest='wan' firewall.@forwarding[1]=forwarding firewall.@forwarding[1].src='vpn_in' firewall.@forwarding[1].dest='vpn_out' firewall.@forwarding[2]=forwarding firewall.@forwarding[2].src='vpn_in' firewall.@forwarding[2].dest='wan' === nft vpn_out/direct snippets === tcp flags & (fin | syn | rst | ack) == syn jump syn_flood comment "!fw4: Rate limit TCP syn packets" iifname "eth0" jump input_wan comment "!fw4: Handle wan IPv4/IPv6 input traffic" iifname "eth2" jump input_Management comment "!fw4: Handle Management IPv4/IPv6 input traffic" iifname "eth3" jump input_direct_in comment "!fw4: Handle direct_in IPv4/IPv6 input traffic" iifname "eth1" jump input_vpn_in comment "!fw4: Handle vpn_in IPv4/IPv6 input traffic" iifname { "vpn1", "vpn2" } jump input_vpn_out comment "!fw4: Handle vpn_out IPv4/IPv6 input traffic" jump handle_reject } chain forward { type filter hook forward priority filter; policy drop; ct state vmap { established : accept, related : accept } comment "!fw4: Handle forwarded flows" iifname "eth0" jump forward_wan comment "!fw4: Handle wan IPv4/IPv6 forward traffic" iifname "eth2" jump forward_Management comment "!fw4: Handle Management IPv4/IPv6 forward traffic" iifname "eth3" jump forward_direct_in comment "!fw4: Handle direct_in IPv4/IPv6 forward traffic" iifname "eth1" jump forward_vpn_in comment "!fw4: Handle vpn_in IPv4/IPv6 forward traffic" iifname { "vpn1", "vpn2" } jump forward_vpn_out comment "!fw4: Handle vpn_out IPv4/IPv6 forward traffic" jump handle_reject } chain output { type filter hook output priority filter; policy accept; oif "lo" accept comment "!fw4: Accept traffic towards loopback" ct state vmap { established : accept, related : accept } comment "!fw4: Handle outbound flows" oifname "eth0" jump output_wan comment "!fw4: Handle wan IPv4/IPv6 output traffic" oifname "eth2" jump output_Management comment "!fw4: Handle Management IPv4/IPv6 output traffic" oifname "eth3" jump output_direct_in comment "!fw4: Handle direct_in IPv4/IPv6 output traffic" oifname "eth1" jump output_vpn_in comment "!fw4: Handle vpn_in IPv4/IPv6 output traffic" oifname { "vpn1", "vpn2" } jump output_vpn_out comment "!fw4: Handle vpn_out IPv4/IPv6 output traffic" } chain prerouting { type filter hook prerouting priority filter; policy accept; iifname "eth3" jump helper_direct_in comment "!fw4: Handle direct_in IPv4/IPv6 helper assignment" iifname "eth1" jump helper_vpn_in comment "!fw4: Handle vpn_in IPv4/IPv6 helper assignment" } chain handle_reject { meta l4proto tcp reject with tcp reset comment "!fw4: Reject TCP traffic" reject comment "!fw4: Reject any other traffic" } chain syn_flood { -- chain reject_to_direct_in { oifname "eth3" counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject direct_in IPv4/IPv6 traffic" } chain input_vpn_in { icmp type echo-request counter packets 0 bytes 0 accept comment "!fw4: Allow-ICMP-from-vpn_in-to-router" jump accept_from_vpn_in } chain output_vpn_in { jump accept_to_vpn_in } chain forward_vpn_in { jump accept_to_vpn_out comment "!fw4: Accept vpn_in to vpn_out forwarding" jump accept_to_wan comment "!fw4: Accept vpn_in to wan forwarding" jump reject_to_vpn_in } chain helper_vpn_in { } chain accept_from_vpn_in { iifname "eth1" counter packets 4 bytes 224 accept comment "!fw4: accept vpn_in IPv4/IPv6 traffic" } chain accept_to_vpn_in { oifname "eth1" counter packets 0 bytes 0 accept comment "!fw4: accept vpn_in IPv4/IPv6 traffic" } chain reject_to_vpn_in { oifname "eth1" counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject vpn_in IPv4/IPv6 traffic" } chain input_vpn_out { jump reject_from_vpn_out } chain output_vpn_out { jump accept_to_vpn_out } chain forward_vpn_out { jump reject_to_vpn_out } chain accept_to_vpn_out { meta nfproto ipv4 oifname { "vpn1", "vpn2" } ct state invalid counter packets 0 bytes 0 drop comment "!fw4: Prevent NAT leakage" oifname { "vpn1", "vpn2" } counter packets 274 bytes 23016 accept comment "!fw4: accept vpn_out IPv4/IPv6 traffic" } chain reject_from_vpn_out { iifname { "vpn1", "vpn2" } counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject vpn_out IPv4/IPv6 traffic" } chain reject_to_vpn_out { oifname { "vpn1", "vpn2" } counter packets 0 bytes 0 jump handle_reject comment "!fw4: reject vpn_out IPv4/IPv6 traffic" } chain dstnat { type nat hook prerouting priority dstnat; policy accept; iifname "eth0" jump dstnat_wan comment "!fw4: Handle wan IPv4/IPv6 dstnat traffic" iifname "eth2" jump dstnat_Management comment "!fw4: Handle Management IPv4/IPv6 dstnat traffic" } chain srcnat { type nat hook postrouting priority srcnat; policy accept; oifname "eth0" jump srcnat_wan comment "!fw4: Handle wan IPv4/IPv6 srcnat traffic" oifname "eth2" jump srcnat_Management comment "!fw4: Handle Management IPv4/IPv6 srcnat traffic" oifname { "vpn1", "vpn2" } jump srcnat_vpn_out comment "!fw4: Handle vpn_out IPv4/IPv6 srcnat traffic" } chain dstnat_wan { meta nfproto ipv4 udp dport 51821 counter packets 0 bytes 0 dnat ip to 10.71.1.189:51821 comment "!fw4: WG_easy_51821_to_VM103" meta nfproto ipv4 udp dport 51820 counter packets 0 bytes 0 dnat ip to 10.71.100.1:51820 comment "!fw4: wg_remote_to_vm100" meta nfproto ipv4 udp dport 51830 counter packets 0 bytes 0 dnat ip to 10.71.100.1:51830 comment "!fw4: DNAT-WG-Paid-51830-to-VM100" } -- ip daddr 192.168.30.186 udp dport 65000-65535 counter packets 0 bytes 0 masquerade comment "!fw4: OMR_SERVER_SNAT_TO_MGMT" meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 Management traffic" } chain srcnat_vpn_out { meta nfproto ipv4 masquerade comment "!fw4: Masquerade IPv4 vpn_out traffic" } chain raw_prerouting { type filter hook prerouting priority raw; policy accept; } chain raw_output { type filter hook output priority raw; policy accept; -- chain mangle_postrouting { type filter hook postrouting priority mangle; policy accept; oifname "eth0" tcp flags & (fin | syn | rst) == syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 egress MTU fixing" oifname { "vpn1", "vpn2" } tcp flags & (fin | syn | rst) == syn tcp option maxseg size set rt mtu comment "!fw4: Zone vpn_out IPv4/IPv6 egress MTU fixing" } chain mangle_input { type filter hook input priority mangle; policy accept; } chain mangle_output { type route hook output priority mangle; policy accept; -- chain mangle_forward { type filter hook forward priority mangle; policy accept; iifname "eth0" tcp flags & (fin | syn | rst) == syn tcp option maxseg size set rt mtu comment "!fw4: Zone wan IPv4/IPv6 ingress MTU fixing" iifname { "vpn1", "vpn2" } tcp flags & (fin | syn | rst) == syn tcp option maxseg size set rt mtu comment "!fw4: Zone vpn_out IPv4/IPv6 ingress MTU fixing" } } rc=0 ################################################################ ### ROUTING TABLES 200-205 ################################################################ === ip rule === 0: from all lookup local 10019: from all iif eth1 lookup 200 10020: from 10.200.0.0/24 lookup 200 32766: from all lookup main 32767: from all lookup default === table 200 === default dev vpn1 scope link 10.200.0.0/24 dev eth1 scope link src 10.200.0.2 10.201.0.0/24 dev eth3 scope link src 10.201.0.2 === table 201 === === table 202 === === table 203 === === table 204 === === table 205 === === /etc/iproute2/rt_tables tail === # # reserved values # 128 prelocal 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep rc=0 ################################################################ ### HMN CACHE / POOL STATUS ################################################################ === key HMN cache files === /root/hmn/cache/selected-awg1-latest.tsv lines=3 /root/hmn/cache/working-awg1-latest.tsv lines=36 /root/hmn/cache/ranked-awg1-latest.tsv lines=15 /root/hmn/cache/ok-awg1-strict-latest.tsv lines=21 /root/hmn/cache/ok-awg1-strict-all-latest.tsv lines=21 /root/hmn/cache/ok-awg1-strict-foreign-latest.tsv lines=16 /root/hmn/cache/fail-awg1-latest.tsv lines=1 /root/hmn/cache/quarantine-awg1-latest.tsv lines=1 /root/hmn/cache/wg-candidates-latest.tsv lines=35 === selected-awg1-latest.tsv sample, sanitized-ish === slot file endpoint avg_ms config_path vpn2 128-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf 192.121.163.235:42530 38.879 [REDACTED_LONG_TOKEN]-LV-Latvia-Riga-S1-192.121.163.235-awg1.conf vpn1 150-NL-Netherlands-Amsterdam-R5-178.215.227.13-awg1.conf 178.215.227.13:44408 53.234 [REDACTED_LONG_TOKEN]-NL-Netherlands-Amsterdam-R5-178.215.227.13-awg1.conf === config directory counts === --- /root/hmn/configs/awg1/latest --- files=0 conf_files=0 --- /root/hmn/configs/awg1 --- files=0 conf_files=0 --- /root/hmn/cache --- files=32 conf_files=0 === HMN scripts references to selected/latest/configs === /root/hmn/hmn-apply-selected.sh:6:SELECTED="${HMN_SELECTED_FILE:-/root/hmn/cache/selected-awg1-latest.tsv}" /root/hmn/hmn-apply-selected.sh:7:QUARANTINE="${HMN_QUARANTINE_FILE:-/root/hmn/cache/quarantine-awg1-latest.tsv}" /root/hmn/hmn-download-all-awg.sh:47:LATEST_DIR="$BASE/configs/awg${AWG_PARAM}/latest" /root/hmn/hmn-download-all-awg.sh:91:cp "$SERVERLIST_FILE" "$BASE/cache/serverlist-latest.json" /root/hmn/hmn-download-all-awg.sh:92:chmod 600 "$BASE/cache/serverlist-latest.json" /root/hmn/hmn-download-all-awg.sh:243:rm -f "$LATEST_DIR" /root/hmn/hmn-download-all-awg.sh:244:ln -s "$CONFIG_DIR" "$LATEST_DIR" /root/hmn/hmn-download-all-awg.sh:246:cp "$WORKING_FILE" "$BASE/cache/working-awg${AWG_PARAM}-latest.tsv" /root/hmn/hmn-download-all-awg.sh:247:cp "$FAIL_FILE" "$BASE/cache/fail-awg${AWG_PARAM}-latest.tsv" /root/hmn/hmn-download-all-awg.sh:248:cp "$CANDIDATES_FILE" "$BASE/cache/wg-candidates-latest.tsv" /root/hmn/hmn-download-all-awg.sh:252:# If the download fails before this point, old latest/quarantine stay untouched. /root/hmn/hmn-download-all-awg.sh:253:QUARANTINE_LATEST="$BASE/cache/quarantine-awg${AWG_PARAM}-latest.tsv" /root/hmn/hmn-download-all-awg.sh:254:if [ -f "$QUARANTINE_LATEST" ]; then /root/hmn/hmn-download-all-awg.sh:255: cp "$QUARANTINE_LATEST" "$RUN_DIR/quarantine-before-reset-awg${AWG_PARAM}.tsv" 2>/dev/null || true /root/hmn/hmn-download-all-awg.sh:260:} > "$QUARANTINE_LATEST" /root/hmn/hmn-download-all-awg.sh:261:chmod 600 "$QUARANTINE_LATEST" /root/hmn/hmn-download-all-awg.sh:291:echo "Latest symlink:" /root/hmn/hmn-download-all-awg.sh:292:echo " $LATEST_DIR" /root/hmn/hmn-download-all-awg.sh:297:echo "Копия latest:" /root/hmn/hmn-download-all-awg.sh:298:echo " $BASE/cache/working-awg${AWG_PARAM}-latest.tsv" /root/hmn/hmn-load-vpn-test.sh:9: CONF="$(ls -t /root/hmn/configs/awg1/latest/*.conf 2>/dev/null | head -n 1 || true)" /root/hmn/hmn-load-vpn-test.sh:20: echo " /root/hmn/configs/awg1/latest/" /root/hmn/hmn-load-vpn-user.sh:9: CONF="$(ls -t /root/hmn/configs/awg1/latest/*.conf 2>/dev/null | head -n 1 || true)" /root/hmn/hmn-load-vpn-user.sh:20: echo " /root/hmn/configs/awg1/latest/" /root/hmn/hmn-plan-selected.sh:5:SELECTED="${HMN_SELECTED_FILE:-/root/hmn/cache/selected-awg1-latest.tsv}" /root/hmn/hmn-pool-low-watermark-check.sh:10:STRICT="${STRICT:-$CACHE/ok-awg1-strict-foreign-latest.tsv}" /root/hmn/hmn-rank-awg.sh:6:CONFIG_DIR="${CONFIG_DIR:-/root/hmn/configs/awg1/latest}" /root/hmn/hmn-rank-awg.sh:7:QUARANTINE="${HMN_RANK_QUARANTINE:-/root/hmn/cache/quarantine-awg1-latest.tsv}" /root/hmn/hmn-rank-awg.sh:40:OUT_LATEST="/root/hmn/cache/ranked-awg1-latest.tsv" /root/hmn/hmn-rank-awg.sh:42:SELECTED_LATEST="/root/hmn/cache/selected-awg1-latest.tsv" /root/hmn/hmn-rank-awg.sh:99:cp "$OUT" "$OUT_LATEST" /root/hmn/hmn-rank-awg.sh:108:cp "$SELECTED" "$SELECTED_LATEST" /root/hmn/hmn-rank-awg.sh:112:echo " $OUT_LATEST" /root/hmn/hmn-rank-awg.sh:117:echo " $SELECTED_LATEST" /root/hmn/hmn-refill-slot.sh:6:TABLE="${TABLE:-$BASE/cache/ok-awg1-strict-foreign-latest.tsv}" /root/hmn/hmn-refill-slot.sh:7:SELECTED="${SELECTED:-$BASE/cache/selected-awg1-latest.tsv}" /root/hmn/hmn-refresh-awg.sh:129:echo "2. test all latest configs through vpn_test" /root/hmn/hmn-refresh-awg.sh:158:say "run: test latest AWG configs" /root/hmn/hmn-refresh-awg.sh:198: cat "$BASE/cache/selected-awg1-latest.tsv" 2>/dev/null || true /root/hmn/hmn-refresh-awg.sh:204: cat "$BASE/cache/quarantine-awg1-latest.tsv" 2>/dev/null || echo "no quarantine file" /root/hmn/hmn-refresh-pool-safe.sh:66: LATEST_DIR="$BASE/configs/awg1/latest" /root/hmn/hmn-refresh-pool-safe.sh:67: OLD_LINK="$(cat "$BACK/configs-latest-readlink.txt" 2>/dev/null || true)" /root/hmn/hmn-refresh-pool-safe.sh:68: OLD_REAL="$(cat "$BACK/configs-latest-realpath.txt" 2>/dev/null || true)" /root/hmn/hmn-refresh-pool-safe.sh:71: rm -rf "$LATEST_DIR" /root/hmn/hmn-refresh-pool-safe.sh:72: ln -s "$OLD_LINK" "$LATEST_DIR" /root/hmn/hmn-refresh-pool-safe.sh:73: say "rollback: latest symlink restored to readlink target: $OLD_LINK" /root/hmn/hmn-refresh-pool-safe.sh:75: rm -rf "$LATEST_DIR" /root/hmn/hmn-refresh-pool-safe.sh:76: ln -s "$OLD_REAL" "$LATEST_DIR" /root/hmn/hmn-refresh-pool-safe.sh:77: say "rollback: latest symlink restored to realpath: $OLD_REAL" /root/hmn/hmn-refresh-pool-safe.sh:79: say "rollback WARN: no usable old latest target" /root/hmn/hmn-refresh-pool-safe.sh:83: ok-awg1-strict-all-latest.tsv \ /root/hmn/hmn-refresh-pool-safe.sh:84: ok-awg1-strict-foreign-latest.tsv \ /root/hmn/hmn-refresh-pool-safe.sh:85: selected-awg1-latest.tsv /root/hmn/hmn-refresh-pool-safe.sh:153: readlink "$BASE/configs/awg1/latest" > "$BACK/configs-latest-readlink.txt" 2>/dev/null || true /root/hmn/hmn-refresh-pool-safe.sh:154: readlink -f "$BASE/configs/awg1/latest" > "$BACK/configs-latest-realpath.txt" 2>/dev/null || true /root/hmn/hmn-refresh-pool-safe.sh:157: "$BASE/cache/ok-awg1-strict-all-latest.tsv" \ /root/hmn/hmn-refresh-pool-safe.sh:158: "$BASE/cache/ok-awg1-strict-foreign-latest.tsv" \ /root/hmn/hmn-refresh-pool-safe.sh:159: "$BASE/cache/selected-awg1-latest.tsv" /root/hmn/hmn-refresh-pool-safe.sh:165: echo "latest before: $(readlink -f "$BASE/configs/awg1/latest" 2>/dev/null || echo none)" /root/hmn/hmn-refresh-pool-safe.sh:205: say "validate fresh/current latest pool through vpn_test" /root/hmn/hmn-refresh-pool-safe.sh:222: say "fallback: keep old configs/latest and validate current local pool through vpn_test" /root/hmn/hmn-refresh-pool-safe.sh:266: echo "latest after: $(readlink -f "$BASE/configs/awg1/latest" 2>/dev/null || echo none)" /root/hmn/hmn-refresh-pool-safe.sh:280: head -n 12 "$BASE/cache/ok-awg1-strict-foreign-latest.tsv" 2>/dev/null || echo "missing" /root/hmn/hmn-refresh-pool-safe.sh:284: cat "$BASE/cache/selected-awg1-latest.tsv" 2>/dev/null || echo "missing" /root/hmn/hmn-test-all-awg.sh:5:CONFIG_DIR="${1:-/root/hmn/configs/awg1/latest}" /root/hmn/hmn-test-all-awg.sh:115: LATEST="$(grep 'latest handshake:' "$SHOW2" | sed 's/^[[:space:]]*//' | head -n1 || true)" /root/hmn/hmn-test-all-awg.sh:118: if [ -z "$LATEST" ]; then /root/hmn/hmn-test-all-awg.sh:131: echo "$STATUS|$LATEST|$TRANSFER|$LOSS_SUMMARY|$AVG" /root/hmn/hmn-test-all-awg.sh:143:printf "status\tfile\tendpoint\tlatest_handshake\ttransfer\tping_loss\tping_rtt_avg\tshow_file\tping_file\n" > "$RESULTS" /root/hmn/hmn-test-all-awg.sh:194: LATEST="$(echo "$RES" | cut -d'|' -f2)" /root/hmn/hmn-test-all-awg.sh:202: "$STATUS" "$FILE" "$ENDPOINT" "$LATEST" "$TRANSFER" "$LOSS_SUMMARY" "$AVG" "$SHOW2" "$PING_LOG" \ /root/hmn/hmn-validate-current-pool.sh:8:CONFIG_DIR="${1:-$BASE/configs/awg1/latest}" /root/hmn/hmn-validate-current-pool.sh:21:QUAR="$CACHE/quarantine-awg1-latest.tsv" /root/hmn/hmn-validate-current-pool.sh:123:OUT_ALL="$REPORTS/ok-awg1-strict-all-$TS.tsv" /root/hmn/hmn-validate-current-pool.sh:124:OUT_FOREIGN="$REPORTS/ok-awg1-strict-foreign-$TS.tsv" /root/hmn/hmn-validate-current-pool.sh:183: "$CACHE/ok-awg1-strict-all-latest.tsv" \ /root/hmn/hmn-validate-current-pool.sh:184: "$CACHE/ok-awg1-strict-foreign-latest.tsv" \ /root/hmn/hmn-validate-current-pool.sh:185: "$CACHE/ok-awg1-strict-latest.tsv" /root/hmn/hmn-validate-current-pool.sh:190:cp "$OUT_ALL" "$CACHE/ok-awg1-strict-all-latest.tsv.new" /root/hmn/hmn-validate-current-pool.sh:191:cp "$OUT_FOREIGN" "$CACHE/ok-awg1-strict-foreign-latest.tsv.new" /root/hmn/hmn-validate-current-pool.sh:192:cp "$OUT_ALL" "$CACHE/ok-awg1-strict-latest.tsv.new" /root/hmn/hmn-validate-current-pool.sh:194:mv "$CACHE/ok-awg1-strict-all-latest.tsv.new" "$CACHE/ok-awg1-strict-all-latest.tsv" /root/hmn/hmn-validate-current-pool.sh:195:mv "$CACHE/ok-awg1-strict-foreign-latest.tsv.new" "$CACHE/ok-awg1-strict-foreign-latest.tsv" /root/hmn/hmn-validate-current-pool.sh:196:mv "$CACHE/ok-awg1-strict-latest.tsv.new" "$CACHE/ok-awg1-strict-latest.tsv" /root/hmn/hmn-validate-current-pool.sh:198:chmod 600 "$CACHE"/ok-awg1-strict*.tsv 2>/dev/null || true /root/hmn/hmn-validate-current-pool.sh:214:cat "$CACHE/selected-awg1-latest.tsv" 2>/dev/null || echo "no selected cache" /root/hmn/hmn-validate-current-pool.sh:220: if [ -n "$EP" ] && awk -F '\t' -v ep="$EP" 'NR>1 && $3==ep {found=1} END{exit found?0:1}' "$CACHE/ok-awg1-strict-foreign-latest.tsv"; then /root/hmn/hmn-validate-current-pool.sh:255:head -n 12 "$CACHE/ok-awg1-strict-all-latest.tsv" /root/hmn/hmn-validate-current-pool.sh:259:head -n 12 "$CACHE/ok-awg1-strict-foreign-latest.tsv" /root/hmn/hmn-vpn-user-override.sh:9:OK_LIST="/root/hmn/cache/ok-awg1-strict-latest.tsv" rc=0 ################################################################ ### READ-ONLY ASSESSMENT ################################################################ No changes applied. Known observations to verify from this status: - expected future slots are vpn1..vpn5 with tables 201..205 - legacy runtime still uses table 200 - vpn1/vpn2 may still exist from legacy HMN - vpn3/vpn4/vpn5 are expected to be absent/empty before apply - if /root/hmn/configs/awg1/latest has 0 .conf files, egress.yml candidate_source must be adjusted before apply Next step after review: - STEP_030C: define provider adapter input source and read-only slot model