#!/bin/sh

PX_GROUP="tproxy"
PX_PORT="2803"
GID=`getent group ${PX_GROUP} | cut -d: -f3`

if [[ -n ${GID} && ${GID} -gt 0 ]]; then
    echo "Applying iptables rules for group '${PX_GROUP}'"
else
    echo "Group '${PX_GROUP}' not exist, please create one."
    exit 1
fi

ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
# ip -6 rule add fwmark 1 table 106
# ip -6 route add local ::/0 dev lo table 106

# ignore local address
iptables -t mangle -N XRAY
iptables -t mangle -A XRAY -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A XRAY -d 100.64.0.0/10 -j RETURN
iptables -t mangle -A XRAY -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A XRAY -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A XRAY -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A XRAY -d 192.0.0.0/24 -j RETURN
iptables -t mangle -A XRAY -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A XRAY -d 240.0.0.0/4 -j RETURN
iptables -t mangle -A XRAY -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A XRAY -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A XRAY ! -s 192.168.0.0/16 -j RETURN
# ip6tables -t mangle -N XRAY6
# ip6tables -t mangle -A XRAY6 -d FF00::0/8 -j RETURN
# ip6tables -t mangle -A XRAY6 -d FE00::0/8 -j RETURN
# ip6tables -t mangle -A XRAY6 -d 0000::0/8 -j RETURN
iptables -t mangle -N XRAY_SELF
iptables -t mangle -A XRAY_SELF -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A XRAY_SELF -d 100.64.0.0/10 -j RETURN
iptables -t mangle -A XRAY_SELF -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A XRAY_SELF -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A XRAY_SELF -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A XRAY_SELF -d 192.0.0.0/24 -j RETURN
iptables -t mangle -A XRAY_SELF -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A XRAY_SELF -d 240.0.0.0/4 -j RETURN
iptables -t mangle -A XRAY_SELF -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A XRAY_SELF -d 192.168.0.0/16 -j RETURN
# ip6tables -t mangle -N XRAY6_SELF
# ip6tables -t mangle -A XRAY6_SELF -d FF00::0/8 -j RETURN
# ip6tables -t mangle -A XRAY6_SELF -d FE00::0/8 -j RETURN
# ip6tables -t mangle -A XRAY6_SELF -d 0000::0/8 -j RETURN

# config route
iptables -t mangle -A XRAY -p tcp -j TPROXY --on-ip 127.0.0.1 --on-port ${PX_PORT} --tproxy-mark 1
iptables -t mangle -A XRAY -p udp -j TPROXY --on-ip 127.0.0.1 --on-port ${PX_PORT} --tproxy-mark 1
# ip6tables -t mangle -A XRAY6 -p udp -j TPROXY --on-ip ::1 --on-port ${PX_PORT} --tproxy-mark 1
# ip6tables -t mangle -A XRAY6 -p tcp -j TPROXY --on-ip ::1 --on-port ${PX_PORT} --tproxy-mark 1
iptables -t mangle -A PREROUTING -j XRAY
# ip6tables -t mangle -A PREROUTING -j XRAY6
iptables -t mangle -A XRAY_SELF -j MARK --set-mark 1
# ip6tables -t mangle -A XRAY6_SELF -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --gid-owner ${GID} -j XRAY_SELF
# ip6tables -t mangle -A OUTPUT -m owner --gid-owner ${GID} -j XRAY6_SELF
