【整理+调试】Openwrt配置gid 透明代理 tproxy 代理备忘

Openwrt配置gid 透明代理 tproxy 代理备忘

opkg install shadow-common shadow-useradd透明代理
opkg install sudo iptables-mod-tproxy iptables-mod-extra
opkg install libopenssl ca-certificates

useradd –system hysteria
grep -qw hysteria /etc/passwd || echo “hysteria:x:0:23333:::” >> /etc/passwd
#注意将这个用户gid改成0,UID改成23333,不然跟后面不配套

iptables -t mangle -A OUTPUT -j HYSTERIA_SELF
iptables -t mangle -A OUTPUT -m owner ! –gid-owner 23333 -j HYSTERIA_SELF

ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

# 代理局域网设备
iptables -t mangle -N HYSTERIA
# “网关所在ipv4网段” 通过运行命令”ip address | grep -w inet | awk ‘{print $2}'”获得,一般有多个
iptables -t mangle -A HYSTERIA -d 172.16.0.0/24 -j RETURN
iptables -t mangle -A HYSTERIA -d 10.9.0.0/24 -j RETURN
iptables -t mangle -A HYSTERIA -d 172.16.10.20/24 -j RETURN

# 组播地址/E类地址/广播地址直连
iptables -t mangle -A HYSTERIA -d 224.0.0.0/3 -j RETURN

#如果网关作为主路由,则加上这一句,见:https://xtls.github.io/documents/level-2/transparent_proxy/transparent_proxy.md#iptables透明代理的其它注意事项
#网关LAN_IPv4地址段,运行命令”ip address | grep -w “inet” | awk ‘{print $2}'”获得,是其中的一个
iptables -t mangle -A HYSTERIA ! -s 网关LAN_IPv4地址段 -j RETURN

# 给 TCP 打标记 1,转发至 12345 端口
# mark只有设置为1,流量才能被HYSTERIA任意门接受
iptables -t mangle -A HYSTERIA -p tcp -j TPROXY –on-port 12345 –tproxy-mark 1
iptables -t mangle -A HYSTERIA -p udp -j TPROXY –on-port 12345 –tproxy-mark 1
# 应用规则
iptables -t mangle -A PREROUTING -j HYSTERIA

# 代理网关本机
iptables -t mangle -N HYSTERIA_MASK
iptables -t mangle -A HYSTERIA_MASK -m owner –gid-owner 23333 -j RETURN
iptables -t mangle -A HYSTERIA_MASK -d 172.16.0.0/24 -j RETURN
iptables -t mangle -A HYSTERIA_MASK -d 224.0.0.0/3 -j RETURN
iptables -t mangle -A HYSTERIA_MASK -j MARK –set-mark 1
iptables -t mangle -A OUTPUT -p tcp -j HYSTERIA_MASK
iptables -t mangle -A OUTPUT -p udp -j HYSTERIA_MASK

代理 ipv6(可选)

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

# 代理局域网设备
ip6tables -t mangle -N HYSTERIA6
# “网关所在ip6网段” 通过运行命令”ip address | grep -w inet6 | awk ‘{print $2}'”获得。
ip6tables -t mangle -A HYSTERIA6 -d 网关所在ipv6网段1 -j RETURN
ip6tables -t mangle -A HYSTERIA6 -d 网关所在ipv6网段2 -j RETURN

# 如果网关作为主路由,则加上这一句,见:https://xtls.github.io/documents/level-2/transparent_proxy/transparent_proxy.md#iptables透明代理的其它注意事项
# 网关LAN_IPv6地址段,运行命令”ip address | grep -w “inet6” | awk ‘{print $2}'”获得,是其中的一个
#ip6tables -t mangle -A HYSTERIA6 ! -s 网关LAN_IPv6地址段 -j RETURN

ip6tables -t mangle -A HYSTERIA6 -p udp -j TPROXY –on-port 12345 –tproxy-mark 1
ip6tables -t mangle -A HYSTERIA6 -p tcp -j TPROXY –on-port 12345 –tproxy-mark 1
ip6tables -t mangle -A PREROUTING -j HYSTERIA6

# 代理网关本机
ip6tables -t mangle -N HYSTERIA6_MASK
ip6tables -t mangle -A HYSTERIA6_MASK -m owner –gid-owner 23333 -j RETURN
#ip6tables -t mangle -A HYSTERIA6_MASK -d 网关所在ipv6网段1 -j RETURN
#ip6tables -t mangle -A HYSTERIA6_MASK -d 网关所在ipv6网段2 -j RETURN
#…
ip6tables -t mangle -A HYSTERIA6_MASK -j MARK –set-mark 1
ip6tables -t mangle -A OUTPUT -p tcp -j HYSTERIA6_MASK
ip6tables -t mangle -A OUTPUT -p udp -j HYSTERIA6_MASK

sudo -u hysteria hysteria-linux-amd64 -c /etc/hysteria/config.yaml &