mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-10-07 01:33:15 +08:00
Chore: adapt fwmark option
This commit is contained in:
@@ -18,10 +18,8 @@ RUN apk add --update --no-cache iptables iproute2 \
|
|||||||
&& chmod +x /entrypoint.sh
|
&& chmod +x /entrypoint.sh
|
||||||
|
|
||||||
ENV TUN=tun0
|
ENV TUN=tun0
|
||||||
ENV ETH=eth0
|
ENV TUN_ADDR=198.18.0.1/15
|
||||||
ENV TUN_ADDR=198.18.0.1
|
ENV LOGLEVEL=info
|
||||||
ENV TUN_MASK=255.254.0.0
|
|
||||||
ENV LOGLEVEL=INFO
|
|
||||||
ENV PROXY=direct://
|
ENV PROXY=direct://
|
||||||
ENV MTU=9000
|
ENV MTU=9000
|
||||||
ENV STATS=
|
ENV STATS=
|
||||||
|
@@ -1,47 +1,32 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
TUN="${TUN:-tun0}"
|
TUN="${TUN:-tun0}"
|
||||||
ETH="${ETH:-eth0}"
|
TUN_ADDR="${TUN_ADDR:-198.18.0.1/15}"
|
||||||
TUN_ADDR="${TUN_ADDR:-198.18.0.1}"
|
LOGLEVEL="${LOGLEVEL:-info}"
|
||||||
TUN_MASK="${TUN_MASK:-255.254.0.0}"
|
|
||||||
LOGLEVEL="${LOGLEVEL:-INFO}"
|
|
||||||
|
|
||||||
mk_tun() {
|
TABLE="${TABLE:-0x2d5}"
|
||||||
# params
|
FWMARK="${FWMARK:-0x2d5}"
|
||||||
NAME="$1"
|
|
||||||
ADDR="$2"
|
create_tun() {
|
||||||
MASK="$3"
|
|
||||||
# create tun device
|
# create tun device
|
||||||
ip tuntap add mode tun dev "$NAME"
|
ip tuntap add mode tun dev "$TUN"
|
||||||
ip addr add "$ADDR/$MASK" dev "$NAME"
|
ip addr add "$TUN_ADDR" dev "$TUN"
|
||||||
ip link set dev "$NAME" up
|
ip link set dev "$TUN" up
|
||||||
}
|
}
|
||||||
|
|
||||||
config_route() {
|
config_route() {
|
||||||
# params
|
|
||||||
TABLE="$1"
|
|
||||||
TUN_IF="$2"
|
|
||||||
ETH_IF="$3"
|
|
||||||
|
|
||||||
# add custom table
|
|
||||||
printf "%s\t%s\n" 100 "$TABLE" >>/etc/iproute2/rt_tables
|
|
||||||
|
|
||||||
# clone main route
|
# clone main route
|
||||||
ip route show table main |
|
ip route show table main |
|
||||||
while read -r route; do
|
while read -r route; do
|
||||||
ip route add ${route%linkdown*} table "$TABLE"
|
ip route add ${route%linkdown*} table "$TABLE"
|
||||||
done
|
done
|
||||||
|
|
||||||
# config default route
|
# replace default route
|
||||||
ip route del default table "$TABLE"
|
ip route replace default dev "$TUN" table "$TABLE"
|
||||||
ip route add default dev "$TUN_IF" table "$TABLE"
|
|
||||||
|
|
||||||
# policy routing
|
# policy routing
|
||||||
tun=$(ip -4 addr show "$TUN_IF" | awk 'NR==2 {print $2}')
|
ip rule add not fwmark "$FWMARK" table "$TABLE"
|
||||||
eth=$(ip -4 addr show "$ETH_IF" | awk 'NR==2 {split($2,a,"/");print a[1]}')
|
ip rule add fwmark "$FWMARK" to "$TUN_ADDR" prohibit
|
||||||
ip rule add from "$eth" to "$tun" priority 9998 prohibit
|
|
||||||
ip rule add from "$eth" priority 9999 table main
|
|
||||||
ip rule add from all priority 10000 table "$TABLE"
|
|
||||||
|
|
||||||
# add tun included routes
|
# add tun included routes
|
||||||
for addr in $(echo "$TUN_INCLUDED_ROUTES" | tr ',' '\n'); do
|
for addr in $(echo "$TUN_INCLUDED_ROUTES" | tr ',' '\n'); do
|
||||||
@@ -54,9 +39,16 @@ config_route() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disable_rp_filter() {
|
||||||
|
for path in /proc/sys/net/ipv4/conf/*; do
|
||||||
|
echo 0 > "$path/rp_filter"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
mk_tun "$TUN" "$TUN_ADDR" "$TUN_MASK"
|
create_tun
|
||||||
config_route "tun2socks" "$TUN" "$ETH"
|
config_route
|
||||||
|
disable_rp_filter
|
||||||
|
|
||||||
# execute extra commands
|
# execute extra commands
|
||||||
if [ -n "$EXTRA_COMMANDS" ]; then
|
if [ -n "$EXTRA_COMMANDS" ]; then
|
||||||
@@ -77,7 +69,7 @@ main() {
|
|||||||
|
|
||||||
exec tun2socks \
|
exec tun2socks \
|
||||||
--loglevel "$LOGLEVEL" \
|
--loglevel "$LOGLEVEL" \
|
||||||
--interface "$ETH" \
|
--fwmark "$FWMARK" \
|
||||||
--device "$TUN" \
|
--device "$TUN" \
|
||||||
--proxy "$PROXY" \
|
--proxy "$PROXY" \
|
||||||
$ARGS
|
$ARGS
|
||||||
|
@@ -98,7 +98,7 @@ func (e *engine) setLogLevel() error {
|
|||||||
func (e *engine) setMark() error {
|
func (e *engine) setMark() error {
|
||||||
if e.Mark != 0 {
|
if e.Mark != 0 {
|
||||||
dialer.SetMark(e.Mark)
|
dialer.SetMark(e.Mark)
|
||||||
log.Infof("[DIALER] set fwmark: %d", e.Mark)
|
log.Infof("[DIALER] set fwmark: %#x", e.Mark)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user