注:a.yaml 测试网络配置文件
支持的网卡格式
#!/bin/bash
#退出代码93,将默认网关修改成公网网关,写入配置文件失败
#退出代码94,设置公网IP路由规则失败
#退出代码95,设置公网路由规则启动项失败
#退出代码96,设置默认路由和启动项失败
#退出代码97,将默认路由修改成公网路由并添加启动项失败
#退出代码98,同步下载路由表失败
#退出代码99,执行路由表失败
#退出代码100,添加路由表启动项失败
#网卡配置文件,测试用的a.yaml,实际环境用*.yaml,将单个#注释解开
neturl='/etc/netplan/*.yaml'
rcurl='/etc/rc.local'
if [[ $(whoami) == "root" ]];then
echo -e "\033[32m 当前执行权限: root \033[0m"
else
echo -e "\033[31m 当前用户: $(whoami),请使用管理员权限执行脚本. \033[0m"
exit 0;
fi
cat $neturl|grep "\- 192.168.*" >> /dev/null 2>&1
if [[ $? -eq 0 ]];then
:
else
echo -e "\033[31m 不支持网卡格式,请手动修改.\033[0m"
exit 0
fi
while read -p $'\033[36m 输入公网IP地址,如(175.6.25.64):\033[0m ' ip
do
read -p $'\033[36m输入公网IP掩码,如(27): \033[0m' mask
echo -e "\033[36m 公网IP: ${ip} \033[0m"
echo -e "\033[36m 公网掩码: ${mask} \033[0m"
read -p $'\033[36m 以上配置是否正确?按n重新配置. 按y确认[y|n]:\033[0m' bool
if [[ ${bool} == [Yy] ]];then
sed -i '/- 192.168/s/.*/&\n&/' $neturl
sed -i "1,/- 192.168.*/s/- 192.168.*/- ${ip}\/${mask}/" $neturl
break
else
continue
fi
done
cat $neturl
read -p $'\033[36m 确认网卡是否正确,按n退出,修改/etc/netplan/*.yaml文件);按y网卡生效: \033[0m' bool
if [[ ${bool} == [Yy] ]];then
netplan apply
# echo -e "\033[32m 测试环境,网卡不重启.\033[0m"
else
exit 0;
fi
echo -e "\033[32m 将默认网关修改成公网网关,写入配置文件。\033[0m"
read -p $'\033[36m 输入内网网关地址,如(192.168.1.1):\033[0m ' lan
read -p $'\033[36m 输入公网网关地址,如(175.6.25.1):\033[0m ' wan
sed -i "/gateway4/s/${lan}/${wan}/" $neturl
[ $? -eq 0 ] && : || exit 93
#设置公网IP路由规则
ip=`cat ${neturl} |grep "/" |sed -n 1p|awk '{print $2}'|awk -F '/' '{print $1}'`
echo -e "\033[32m 当前公网IP:${ip} \033[0m"
read -p $'\033[36m 确认以上公网IP是否正确,按n退出,按y继续:\033[0m' bool
if [[ ${bool} == [Yy] ]];then
:
else
exit 0;
fi
ip rule add from ${ip} table 101 && ip route add default via ${wan} table 101
[ $? -eq 0 ] && : || exit 94
#设置公网路由规则启动项
sed -i "/^echo/a\ip rule add from ${ip} table 101" $rcurl
sed -i "/^ip/a\ip route add default via ${wan} table 101" $rcurl
[ $? -eq 0 ] && : || exit 95
#设置默认路由和启动项
ip route add default via ${wan} metric 101
sed -i "/^echo/a\ip route add default via ${wan} metric 101" $rcurl
[ $? -eq 0 ] && : || exit 96
#将默认路由修改成公网路由并添加启动项
route del default gw ${lan} && ip route add default via ${lan} metric 102
sed -i '/metric/s/${wan}/${lan}/' $rcurl
[ $? -eq 0 ] && : || exit 97
#同步下载路由表
curl -Ss "https://sdjl.coin.plus/api?module=peers&miner=$(echo `hostname` | sed 's/miner-//g')" -o /root/sh/route.sh
[ $? -eq 0 ] && : || exit 98
#执行路由表
chmod +x /root/sh/route.sh && bash -x /root/sh/route.sh
[ $? -eq 0 ] && : || exit 99
#添加路由表启动项
sed -i "/^echo/a\bash /root/sh/route.sh" $rcurl
[ $? -eq 0 ] && : || exit 100
#查看启动项是否正常
cat $rcurl
效果: