Last active
January 9, 2025 20:32
-
-
Save SaeedDev94/61e84a13f1259e60f5060670ceb4fb50 to your computer and use it in GitHub Desktop.
Linux xray tun2socks routing helper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
if [ "$EUID" -ne 0 ]; then echo "Please run as root"; exit; fi | |
GATEWAY=$(ip route | awk '/default/ {print $3}') | |
GATEWAY_V6=$(ip -6 route | awk '/default/ {print $3}') | |
INTERFACE=$(ip route | awk '/default/ {print $5}') | |
XRAY_EXE="/opt/xray/xray" | |
XRAY_CONFIG="/path/to/config.json" | |
SOCKS_SCHEME="socks5" | |
SOCKS_ADDRESS="127.0.0.1" | |
SOCKS_PORT="10808" | |
SOCKS_UDP="udp" | |
DNS_PRIMARY="1.1.1.1" | |
DNS_SECONDARY="1.0.0.1" | |
DNS_PRIMARY_V6="2606:4700:4700::1111" | |
DNS_SECONDARY_V6="2606:4700:4700::1001" | |
EXCLUDE_FWMARK="0x5" | |
EXCLUDE_TABLE="99" | |
EXCLUDE_RULE="fwmark $EXCLUDE_FWMARK table $EXCLUDE_TABLE" | |
EXCLUDE_ROUTE="default via $GATEWAY dev $INTERFACE table $EXCLUDE_TABLE" | |
EXCLUDE_ROUTE_V6="default via $GATEWAY_V6 dev $INTERFACE table $EXCLUDE_TABLE" | |
TUN_NAME="tun0" | |
TUN_MTU="8500" | |
TUN_IPV4="10.10.10.10" | |
TUN_IPV6="fc00::1" | |
TUN_EXE="/opt/hev-socks5-tunnel/bin/hev-socks5-tunnel" | |
TUN_CONF="/tmp/tun2socks.yml" | |
TUN_ROUTE="default dev $TUN_NAME metric 1" | |
echo " | |
tunnel: | |
name: $TUN_NAME | |
mtu: $TUN_MTU | |
ipv4: $TUN_IPV4 | |
ipv6: '$TUN_IPV6' | |
socks5: | |
address: $SOCKS_ADDRESS | |
port: $SOCKS_PORT | |
udp: $SOCKS_UDP | |
" > $TUN_CONF | |
start() { | |
echo "Exclude routes" | |
ip rule add $EXCLUDE_RULE | |
ip route add $EXCLUDE_ROUTE | |
ip -6 rule add $EXCLUDE_RULE | |
ip -6 route add $EXCLUDE_ROUTE_V6 | |
echo "Start tun2socks" | |
$TUN_EXE $TUN_CONF > /dev/null & | |
local TUN_PID="$!" | |
echo "Wait 1 second to make sure $TUN_NAME created" | |
sleep 1 | |
echo "Tun routes" | |
ip route add $TUN_ROUTE | |
ip -6 route add $TUN_ROUTE | |
echo "Handle DNS" | |
resolvectl domain $TUN_NAME "~." | |
resolvectl default-route $TUN_NAME true | |
resolvectl dns $TUN_NAME $DNS_PRIMARY $DNS_SECONDARY $DNS_PRIMARY_V6 $DNS_SECONDARY_V6 | |
resolvectl default-route $INTERFACE false | |
echo "Waiting for $TUN_PID" | |
wait $TUN_PID | |
} | |
stop() { | |
echo "..." | |
echo "Restore DNS" | |
resolvectl default-route $INTERFACE true | |
echo "Routing clean up" | |
ip route del $EXCLUDE_ROUTE | |
ip rule del $EXCLUDE_RULE | |
ip -6 route del $EXCLUDE_ROUTE_V6 | |
ip -6 rule del $EXCLUDE_RULE | |
} | |
echo "Start xray" | |
$XRAY_EXE run -c "$XRAY_CONFIG" > /dev/null & | |
trap stop EXIT | |
echo "Wait 1 second to make sure xray is running" | |
sleep 1 | |
start |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Related links: