Files
op-packages/luci-app-hijpass/root/usr/lib/hijpass/route.sh
T

98 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
. /usr/lib/hijpass/app-logger.sh
log_debug "$0"
ACTION="$1"
TABLE_NUMBER="233"
TPROXY_MARK="0x1"
RT_TABLES_FILE="/etc/iproute2/rt_tables"
TABLE_NAME="hijpass"
add_route() {
delete_route
add_table
ip route add local default dev lo table "$TABLE_NAME"
log_debug "Added IPv4 local route to table ${TABLE_NAME}"
ip rule add fwmark "$TPROXY_MARK" table "$TABLE_NAME"
log_debug "Added IPv4 rule with fwmark ${TPROXY_MARK}"
ip -6 route add local default dev lo table "$TABLE_NAME"
log_debug "Added IPv6 local route to table ${TABLE_NAME}"
ip -6 rule add fwmark "$TPROXY_MARK" table "$TABLE_NAME"
log_debug "Added IPv6 rule with fwmark ${TPROXY_MARK}"
}
delete_route() {
while ip rule show | grep -q "fwmark $TPROXY_MARK lookup $TABLE_NAME"; do
ip rule delete fwmark "$TPROXY_MARK" table "$TABLE_NAME"
log_debug "IPv4 Rule with fwmark $TPROXY_MARK deleted from table ${TABLE_NAME}"
done
while ip -6 rule show | grep -q "fwmark $TPROXY_MARK lookup $TABLE_NAME"; do
ip -6 rule delete fwmark "$TPROXY_MARK" table "$TABLE_NAME"
log_debug "IPv6 rule with fwmark $TPROXY_MARK deleted from table ${TABLE_NAME}"
done
if ip route del local default dev lo table "$TABLE_NAME" 2>/dev/null; then
log_debug "Removed ${TABLE_NAME} existing IPv4 default route Successfully"
else
log_debug "No existing IPv4 default route to remove"
fi
if ip -6 route del local default dev lo table "$TABLE_NAME" 2>/dev/null; then
log_debug "Removed ${TABLE_NAME} existing IPv6 default route Successfully"
else
log_debug "No existing IPv6 default route to remove"
fi
delete_table
}
add_table() {
if grep -qE "^\s*${TABLE_NUMBER}\s+${TABLE_NAME}\s*$" "$RT_TABLES_FILE"; then
log_debug "Table ${TABLE_NAME} with number ${TABLE_NUMBER} already exists"
else
echo "${TABLE_NUMBER} ${TABLE_NAME}" >>"$RT_TABLES_FILE"
log_debug "Table ${TABLE_NAME} with number ${TABLE_NUMBER} added"
fi
}
delete_table() {
if grep -qE "^\s*${TABLE_NUMBER}\s+${TABLE_NAME}\s*$" "$RT_TABLES_FILE"; then
sed -i "/^\s*${TABLE_NUMBER}\s\+${TABLE_NAME}\s*$/d" "$RT_TABLES_FILE"
log_debug "Deleted table ${TABLE_NAME} with number ${TABLE_NUMBER}"
else
log_debug "Table ${TABLE_NAME} with number ${TABLE_NUMBER} does not exist"
fi
}
usage() {
echo "Usage: $0 [reset_hijpass_route|remove_hijpass_route]"
exit 1
}
if [ "$#" -ne 1 ]; then
usage
fi
case "$ACTION" in
reset_hijpass_route)
log_info "Configuring hijpass routing..."
add_route
log_info "Configured hijpass routing successfully"
;;
remove_hijpass_route)
log_info "Removing hijpass routing configuration..."
delete_route
log_info "Removed hijpass routing configuration successfully"
;;
*)
usage
;;
esac