Skip to content

Instantly share code, notes, and snippets.

@SaeedDev94
Last active May 12, 2024 06:12
Show Gist options
  • Save SaeedDev94/61e84a13f1259e60f5060670ceb4fb50 to your computer and use it in GitHub Desktop.
Save SaeedDev94/61e84a13f1259e60f5060670ceb4fb50 to your computer and use it in GitHub Desktop.
Linux xray tun2socks routing helper
#!/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