27 lines
1.6 KiB
Bash
27 lines
1.6 KiB
Bash
#!/bin/sh
|
||
# podkop-probe.sh (NIIKN OpenWrt 192.168.1.50) — проба обхода ИЗ-ЗА КЛИЕНТА.
|
||
# netns-«LAN-клиент» на br-lan: трафик идёт client→MikroTik(.1)→OpenWrt-tproxy, как у реального ПК —
|
||
# в отличие от роутерного curl (output-путь), который маскирует залип forward/tproxy.
|
||
# exit 0 = обход у клиентов работает; 1 = сломан (повод лечить); 2 = инфра (не повод лечить podkop).
|
||
NS=pkprobe; GW=192.168.1.1; DNS=192.168.1.50; CIP=192.168.1.242
|
||
cleanup(){ ip netns del $NS 2>/dev/null; ip link del veth-h 2>/dev/null; }
|
||
cleanup
|
||
ip link add veth-h type veth peer name veth-p 2>/dev/null || exit 2
|
||
ip netns add $NS 2>/dev/null || { cleanup; exit 2; }
|
||
ip link set veth-p netns $NS
|
||
ip link set veth-h master br-lan; ip link set veth-h up
|
||
ip netns exec $NS ip link set lo up
|
||
ip netns exec $NS ip link set veth-p up
|
||
ip netns exec $NS ip addr add $CIP/24 dev veth-p
|
||
ip netns exec $NS ip route add default via $GW
|
||
FIP=$(ip netns exec $NS nslookup web.telegram.org $DNS 2>/dev/null | awk '/^Address[ :]/{a=$NF} END{print a}')
|
||
case "$FIP" in
|
||
198.1[89].*) : ;; # домен заворачивается в туннель — ок
|
||
"") cleanup; exit 2 ;; # DNS молчит — инфра
|
||
*) cleanup; exit 1 ;; # не FakeIP — списки/FakeIP сломаны
|
||
esac
|
||
CODE=$(ip netns exec $NS curl -s -o /dev/null -w '%{http_code}' --resolve web.telegram.org:443:"$FIP" --max-time 8 https://web.telegram.org/ 2>/dev/null)
|
||
cleanup
|
||
[ "$CODE" = "200" ] || [ "$CODE" = "302" ] && exit 0
|
||
exit 1
|