forked from Neilpang/wgcf-docker
-
Notifications
You must be signed in to change notification settings - Fork 1
/
entry.sh
114 lines (88 loc) · 2.44 KB
/
entry.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env bash
set -e
#我学艺不精,不知道为什么别名无效,希望有大佬指点一下
# alias warp-cli='warp-cli --accept-tos'
DEFAULT_GATEWAY_NETWORK_CARD_NAME=`ip route | grep default | awk '{print $5}'`
DEFAULT_ROUTE_IP=`ip addr show $DEFAULT_GATEWAY_NETWORK_CARD_NAME | grep "inet " | awk '{print $2}' | sed "s/\/.*//"`
#-4|-6
runwgcf() {
trap '_downWarp' ERR TERM INT
systemctl start warp-svc
WARP_PATH="/var/lib/cloudflare-warp"
if [ ! -e "$WARP_PATH/reg.json" ]; then
warp-cli --accept-tos register
warp-cli --accept-tos set-mode warp+dot
warp-cli --accept-tos enable-always-on
else
warp-cli --accept-tos rotate-keys
fi
case $1 in
"-4")
[[ $(warp-cli --accept-tos get-excluded-routes) =~ "0.0.0.0/0" ]] && warp-cli --accept-tos remove-excluded-route 0.0.0.0/0
warp-cli --accept-tos add-excluded-route ::/0
;;
"-6")
[[ $(warp-cli --accept-tos get-excluded-routes) =~ "::/0" ]] && warp-cli --accept-tos remove-excluded-route ::/0
warp-cli --accept-tos add-excluded-route 0.0.0.0/0
;;
*)
warp-cli --accept-tos remove-excluded-route 0.0.0.0/0
warp-cli --accept-tos remove-excluded-route ::/0
esac
ip rule add from $DEFAULT_ROUTE_IP lookup main prio 0
connectWarp
nft add chain inet cloudflare-warp output '{ policy accept; }'
nft add chain inet cloudflare-warp input '{ policy accept; }'
echo
case $1 in
"-4")
_checkV4 || _downWarp 1
;;
"-6")
_checkV6 || _downWarp 1
;;
*)
(_checkV4 && echo && _checkV6) || _downWarp 1
;;
esac
echo
echo "OK, cf-warp is up."
sleep infinity & wait
}
_downWarp() {
echo
echo "clean up"
if ! warp-cli --accept-tos disconnect; then
echo "error down"
fi
ip rule delete from $DEFAULT_ROUTE_IP lookup main
echo "clean up done"
exit $1;
}
_checkV4() {
_check 4
}
_checkV6() {
_check 6
}
_check() {
echo "Checking ipv$1 network status, please wait...."; echo;
errorCount=0;
while ! curl -s$1 --max-time 2 https://www.cloudflare.com/cdn-cgi/trace/; do
if [[ $errorCount = 3 ]]; then return 1; fi;
warp-cli --accept-tos disconnect;
echo "Sleep 3 and retry again. count: $((errorCount + 1))/3";
sleep 3;
connectWarp;
let errorCount++;
done
}
connectWarp() {
warp-cli --accept-tos connect;
sleep 3;
}
if [ -z "$@" ] || [[ "$1" = -* ]]; then
runwgcf "$@"
else
exec "$@"
fi