routesync
This commit is contained in:
72
route-sync
Normal file
72
route-sync
Normal file
@@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
MAIN_TABLE="main"
|
||||
RT_TABLES_FILE="/etc/iproute2/rt_tables"
|
||||
|
||||
check_root() {
|
||||
if [ $EUID -ne 0 ]; then
|
||||
echo "错误:操作路由表需要root权限,请使用sudo运行脚本!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
get_custom_tables() {
|
||||
grep -vE '^#|^$' "${RT_TABLES_FILE}" | awk '{print $1}' | \
|
||||
grep -E '^[0-9]+$' | grep -v "^${MAIN_TABLE}$" | sort -n | uniq | tr '\n' ' ' | sed 's/ $//'
|
||||
}
|
||||
|
||||
sync_ipv4_routes() {
|
||||
local custom_tables="$1"
|
||||
local ipv4_routes
|
||||
ipv4_routes=$(ip -4 route show table "${MAIN_TABLE}" proto kernel scope link)
|
||||
local ipv4_count=$(echo "${ipv4_routes}" | grep -c .)
|
||||
|
||||
if [ ${ipv4_count} -gt 0 ]; then
|
||||
echo "${ipv4_routes}" | while read -r route; do
|
||||
[ -z "${route}" ] && continue
|
||||
for table in ${custom_tables}; do
|
||||
ip -4 route replace ${route} table ${table} >/dev/null 2>&1
|
||||
done
|
||||
#echo "${route} --> ${custom_tables}"
|
||||
done
|
||||
echo "IPv4同步完成,共${ipv4_count}条"
|
||||
else
|
||||
echo "IPv4无直连路由"
|
||||
fi
|
||||
}
|
||||
|
||||
sync_ipv6_routes() {
|
||||
|
||||
local custom_tables="$1"
|
||||
local ipv6_routes
|
||||
ipv6_routes=$(ip -6 route show table "${MAIN_TABLE}" proto kernel metric 256)
|
||||
local ipv6_count=$(echo "${ipv6_routes}" | grep -c .)
|
||||
|
||||
if [ ${ipv6_count} -gt 0 ]; then
|
||||
echo "${ipv6_routes}" | while read -r route; do
|
||||
[ -z "${route}" ] && continue
|
||||
for table in ${custom_tables}; do
|
||||
ip -6 route replace ${route} table ${table} >/dev/null 2>&1
|
||||
done
|
||||
#echo "${route} --> ${custom_tables}"
|
||||
done
|
||||
echo "IPv6同步完成,共${ipv6_count}条"
|
||||
else
|
||||
echo "IPv6无直连路由可同步"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
check_root
|
||||
local CUSTOM_TABLES=$(get_custom_tables)
|
||||
if [ -z "${CUSTOM_TABLES}" ]; then
|
||||
echo "提示:${RT_TABLES_FILE}中无自定义路由表(已排除254主表),退出执行"
|
||||
exit 0
|
||||
fi
|
||||
echo "获取到路由表:${CUSTOM_TABLES}"
|
||||
sync_ipv4_routes "${CUSTOM_TABLES}"
|
||||
sync_ipv6_routes "${CUSTOM_TABLES}"
|
||||
|
||||
echo "所有路由同步完成!"
|
||||
}
|
||||
|
||||
main
|
||||
Reference in New Issue
Block a user