Update bypassgateway
This commit is contained in:
191
cattools.sh
191
cattools.sh
@@ -131,20 +131,30 @@ setip(){
|
|||||||
|
|
||||||
# Network Wizard
|
# Network Wizard
|
||||||
network_wizard() {
|
network_wizard() {
|
||||||
read -p "Do you want Network Wizard? /// 是否使用网络向导?(Enter 确认,按 0 退出): " use_wizard
|
read -p "Do you want Network Wizard? /// 是否使用网络向导?([Enter] 确认 / [0] 退出): " use_wizard
|
||||||
if [ "$use_wizard" == "0" ]; then
|
if [ "$use_wizard" == "0" ]; then
|
||||||
echo "网络向导已退出。"
|
echo "网络向导已退出。"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ condition_to_check_single_port_device ]; then
|
||||||
|
read -p "检测到单网口设备,是否进行旁路网关设置?([Enter] 确认 / [0] 跳过旁路设置):" choice
|
||||||
|
if [ "$choice" == "0" ]; then
|
||||||
|
echo "继续使用网络向导..."
|
||||||
|
network_wizard
|
||||||
|
else
|
||||||
|
bypass_gateway
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "CatWrt default IP is 192.168.1.4 /// 默认 CatWrt IP 为 192.168.1.4"
|
echo "CatWrt default IP is 192.168.1.4 /// 默认 CatWrt IP 为 192.168.1.4"
|
||||||
read -p "是否修改 IP 地址?(Enter 确认,按 0 退出): " modify_ip
|
read -p "是否修改 IP 地址?([Enter] 保持默认 / [0] 自定义): " modify_ip
|
||||||
if [ "$modify_ip" != "0" ]; then
|
if [ "$modify_ip" != "0" ]; then
|
||||||
read -p "请输入 IP (默认为 $DEFAULT_IP): " input_ip
|
read -p "请输入 IP (默认为 $DEFAULT_IP): " input_ip
|
||||||
if [[ -z $input_ip ]]; then
|
if [[ -z $input_ip ]]; then
|
||||||
input_ip=$DEFAULT_IP
|
input_ip=$DEFAULT_IP
|
||||||
elif ! [[ $input_ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
|
elif ! [[ $input_ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
|
||||||
echo "无效的 IP 地址"
|
echo "无效的 IP 地址。"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -152,23 +162,8 @@ network_wizard() {
|
|||||||
echo "IP 地址已设置为 $input_ip"
|
echo "IP 地址已设置为 $input_ip"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Recommended DNS: 223.6.6.6 119.29.29.99 /// 推荐使用的DNS: 223.6.6.6 119.29.29.99"
|
|
||||||
read -p "是否使用推荐的 DNS 服务器?(Enter 确认,按 0 退出): " use_dns
|
|
||||||
if [ "$use_dns" != "0" ]; then
|
|
||||||
read -p "请输入 DNS (默认为 $DEFAULT_DNS): " input_dns
|
|
||||||
if [[ -z $input_dns ]]; then
|
|
||||||
input_dns=$DEFAULT_DNS
|
|
||||||
elif ! [[ $input_dns =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}( [0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
|
|
||||||
echo "无效的 DNS 地址。"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
uci set network.lan.dns="$input_dns"
|
|
||||||
echo "DNS 服务器已设置为 $input_dns"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "IPv6 is enabled by default /// IPv6 默认是开启的"
|
echo "IPv6 is enabled by default /// IPv6 默认是开启的"
|
||||||
read -p "是否禁用 IPv6 网络?(Enter 确认,按 1 禁用,按 0 退出): " disable_ipv6
|
read -p "是否禁用 IPv6 网络?([Enter] 跳过 / [1] 禁用): " disable_ipv6
|
||||||
if [ "$disable_ipv6" == "1" ]; then
|
if [ "$disable_ipv6" == "1" ]; then
|
||||||
uci delete dhcp.lan.dhcpv6
|
uci delete dhcp.lan.dhcpv6
|
||||||
uci delete dhcp.lan.ra
|
uci delete dhcp.lan.ra
|
||||||
@@ -178,7 +173,7 @@ network_wizard() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Default connection mode is DHCP /// 默认模式为 DHCP"
|
echo "Default connection mode is DHCP /// 默认模式为 DHCP"
|
||||||
read -p "是否进行 PPPoE 拨号?(Enter 确认,按 1 继续修改账号和密码,按 0 退出): " use_pppoe
|
read -p "是否进行 PPPoE 拨号?([Enter] 继续 DHCP / [1] PPPoE 拨号): " use_pppoe
|
||||||
if [ "$use_pppoe" == "1" ]; then
|
if [ "$use_pppoe" == "1" ]; then
|
||||||
read -p "请输入宽带账号: " username
|
read -p "请输入宽带账号: " username
|
||||||
read -s -p "请输入宽带密码: " password
|
read -s -p "请输入宽带密码: " password
|
||||||
@@ -188,7 +183,7 @@ network_wizard() {
|
|||||||
echo "PPPoE 拨号配置已完成"
|
echo "PPPoE 拨号配置已完成"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
read -p "Use recommended DNS servers 223.6.6.6 119.29.29.99? /// 使用推荐的 DNS 服务器 223.6.6.6 119.29.29.99 吗?(Enter 确认,按 0 退出): " use_dns
|
read -p "Use recommended DNS servers 223.6.6.6 119.29.29.99? /// 使用推荐的 DNS 服务器 223.6.6.6 119.29.29.99 吗?([Enter] 确认 / [0] 跳过): " use_dns
|
||||||
if [ "$use_dns" = "0" ]; then
|
if [ "$use_dns" = "0" ]; then
|
||||||
exit 0
|
exit 0
|
||||||
elif [ -z "$use_dns" ]; then
|
elif [ -z "$use_dns" ]; then
|
||||||
@@ -202,7 +197,7 @@ network_wizard() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
read -p "Do you want to change the DHCP IP pool range? (default: 30-200) /// 是否修改 IP 可用段?(默认: 30-200, 按 1 手动输入范围): " dhcp_choice
|
read -p "Do you want to change the DHCP IP pool range? (default: 30-200) /// 是否修改 IP 可用段?(默认: 30-200 按 [Enter] 确认 / [1] 手动输入范围 ): " dhcp_choice
|
||||||
if [ "$dhcp_choice" = "1" ]; then
|
if [ "$dhcp_choice" = "1" ]; then
|
||||||
read -p "Enter the DHCP IP pool range (e.g., 40-210) /// 输入 DHCP IP 地址范围 (例如: 40-210): " dhcp_range
|
read -p "Enter the DHCP IP pool range (e.g., 40-210) /// 输入 DHCP IP 地址范围 (例如: 40-210): " dhcp_range
|
||||||
if [[ $dhcp_range =~ ^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\-([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]]; then
|
if [[ $dhcp_range =~ ^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\-([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]]; then
|
||||||
@@ -220,26 +215,170 @@ network_wizard() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "enable DHCP force /// 开启 DHCP 强制可以避免局域网收到 AP 吐地址的问题"
|
echo "enable DHCP force /// 开启 DHCP 强制可以避免局域网收到 AP 吐地址的问题"
|
||||||
read -p "是否开启强制 DHCP 模式?(Enter 确认,按 1 跳过): " force_dhcp
|
read -p "是否开启强制 DHCP 模式?([Enter] 确认,按 [1] 跳过): " force_dhcp
|
||||||
if [ "$force_dhcp" != "1" ]; then
|
if [ "$force_dhcp" != "1" ]; then
|
||||||
uci set dhcp.lan.force=1
|
uci set dhcp.lan.force=1
|
||||||
echo "强制 DHCP 模式已开启"
|
echo "强制 DHCP 模式已开启"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Enable UPNP by default /// 默认开启 UPNP,可提升 BT/P2P 软件连接性,但客户端容易受到流氓软件滥用 P2P 网络导致上行带宽异常!"
|
echo "Enable UPNP by default /// 默认开启 UPNP,可提升 BT/P2P 软件连接性,但客户端容易受到流氓软件滥用 P2P 网络导致上行带宽异常!"
|
||||||
read -p "是否开启 UPNP?(Enter 确认,按 1 跳过): " enable_upnp
|
read -p "是否开启 UPNP?([Enter] 确认,按 [1] 跳过): " enable_upnp
|
||||||
if [ "$enable_upnp" != "1" ]; then
|
if [ "$enable_upnp" != "1" ]; then
|
||||||
uci set upnpd.config.enabled=1
|
uci set upnpd.config.enabled=1
|
||||||
echo "UPNP 已开启"
|
echo "UPNP 已开启"
|
||||||
fi
|
fi
|
||||||
|
arch=$(grep "arch" /etc/catwrt_release | cut -d'=' -f2)
|
||||||
|
|
||||||
|
# 仅在 x86 和 aarch64_generic 架构上进行网口绑定
|
||||||
|
if [ "$arch" = "amd64" ] || [ "$arch" = "aarch64_generic" ]; then
|
||||||
|
echo "Configure network interfaces /// 配置网口"
|
||||||
|
echo ""
|
||||||
|
echo " Wan LAN1 LANx ..."
|
||||||
|
echo " eth0 eth1 ethx ..."
|
||||||
|
echo " □ □ □ ..."
|
||||||
|
echo ""
|
||||||
|
read -p "Press Enter to configure network interfaces, press 1 to skip /// [Enter] 确认配置网口,按 [1] 跳过: " configure_network
|
||||||
|
if [ "$configure_network" != "1" ]; then
|
||||||
|
# 获取所有网口列表
|
||||||
|
interfaces=$(ls /sys/class/net | grep -E 'eth[0-9]+')
|
||||||
|
iface_count=$(echo "$interfaces" | wc -w)
|
||||||
|
|
||||||
|
if [ "$iface_count" -eq 1 ]; then
|
||||||
|
echo "Detected a single network interface, no configuration needed /// 检测到单个网口,无需配置"
|
||||||
|
else
|
||||||
|
echo "Detected multiple network interfaces /// 检测到多个网口"
|
||||||
|
# 默认桥接网口为 eth1,检测其他可用网口并添加到桥接列表
|
||||||
|
bridge_ports=""
|
||||||
|
for iface in $interfaces; do
|
||||||
|
if [ "$iface" != "eth0" ]; then
|
||||||
|
bridge_ports="$bridge_ports $iface"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
uci set network.wan.ifname='eth0'
|
||||||
|
uci set network.wan.proto='dhcp'
|
||||||
|
|
||||||
|
uci set network.lan.type='bridge'
|
||||||
|
uci set network.lan.ifname="$bridge_ports"
|
||||||
|
uci set network.lan._orig_ifname="$bridge_ports"
|
||||||
|
uci set network.lan._orig_bridge='true'
|
||||||
|
|
||||||
|
|
||||||
|
echo "Network interfaces configured: WAN (eth0), LAN ($bridge_ports) /// 网口已配置: WAN (eth0), LAN ($bridge_ports)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Skipping network interface configuration /// 跳过网口配置"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "System architecture $arch is not supported by this script. No changes made. /// 系统架构 $arch 不支持该脚本。未进行任何更改。"
|
||||||
|
fi
|
||||||
|
|
||||||
uci commit
|
uci commit
|
||||||
/etc/init.d/network restart
|
/etc/init.d/network restart
|
||||||
/etc/init.d/dnsmasq restart
|
/etc/init.d/dnsmasq restart
|
||||||
/etc/init.d/firewall restart
|
/etc/init.d/firewall restart
|
||||||
/etc/init.d/miniupnpd restart
|
/etc/init.d/miniupnpd restart
|
||||||
echo "Network configuration saved and applied. If you encounter any issues, please restart!"
|
}
|
||||||
echo "网络配置已保存并应用,服务已重启,如遇到问题问题请手动重启!"
|
|
||||||
|
# BypassGateway
|
||||||
|
bypass_gateway() {
|
||||||
|
ip="$1"
|
||||||
|
if echo "$ip" | grep -Eq '^(10|172\.(1[6-9]|2[0-9]|3[01])|192\.168)\.'; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 输入主路由的 IP 地址
|
||||||
|
while true; do
|
||||||
|
read -p "请输入主路由的 IP 地址(例如 192.168.31.1):" router_ip
|
||||||
|
if [ -z "$router_ip" ]; then
|
||||||
|
echo "主路由 IP 地址不能为空,请重新输入。"
|
||||||
|
elif ! is_private_ip "$router_ip"; then
|
||||||
|
echo "输入的 IP 地址无效,请输入有效的 IP 地址"
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 提取子网地址和设置本机 IP 地址
|
||||||
|
subnet=$(echo "$router_ip" | cut -d. -f1-3)
|
||||||
|
default_device_ip="${subnet}.4"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
read -p "本机 IP 地址为 $default_device_ip 按回车键确认,或输入新的 IP 地址:" device_ip
|
||||||
|
if [ -z "$device_ip" ]; then
|
||||||
|
device_ip="$default_device_ip"
|
||||||
|
break
|
||||||
|
elif ! is_private_ip "$device_ip"; then
|
||||||
|
echo "输入的 IP 地址无效,请输入有效的 IP 地址。"
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "主路由 IP 地址:$router_ip"
|
||||||
|
echo "本机 IP 地址:$device_ip"
|
||||||
|
|
||||||
|
# 配置网络
|
||||||
|
uci set network.lan.ipaddr="$device_ip"
|
||||||
|
uci set network.lan.gateway="$router_ip"
|
||||||
|
uci set network.lan.proto='static'
|
||||||
|
uci commit network
|
||||||
|
|
||||||
|
# 禁用 LAN 口的 IPv6 服务器
|
||||||
|
uci set dhcp.lan.dhcpv6='disabled'
|
||||||
|
uci set dhcp.lan.ra='disabled'
|
||||||
|
uci commit dhcp
|
||||||
|
|
||||||
|
# 启用 MSS 钳制
|
||||||
|
uci set firewall.@defaults[0].mss_clamping='1'
|
||||||
|
|
||||||
|
# 启用 IP 伪装和 MTU fix
|
||||||
|
# 找到 LAN 和 WAN 的 zone 配置节
|
||||||
|
lan_zone=$(uci show firewall | grep "=zone" | grep -E 'name=.lan' | cut -d'.' -f2)
|
||||||
|
wan_zone=$(uci show firewall | grep "=zone" | grep -E 'name=.wan' | cut -d'.' -f2)
|
||||||
|
|
||||||
|
# 启用 LAN 区域的 IP 伪装和 MTU fix
|
||||||
|
if [ -n "$lan_zone" ]; then
|
||||||
|
uci set firewall.$lan_zone.masq='1'
|
||||||
|
uci set firewall.$lan_zone.mtu_fix='1'
|
||||||
|
else
|
||||||
|
echo "未找到名称为 'lan' 的 zone 配置节"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 启用 WAN 区域的 IP 伪装和 MTU 修复
|
||||||
|
if [ -n "$wan_zone" ]; then
|
||||||
|
uci set firewall.$wan_zone.masq='1'
|
||||||
|
uci set firewall.$wan_zone.mtu_fix='1'
|
||||||
|
else
|
||||||
|
echo "未找到名称为 'wan' 的 zone 配置节"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
uci commit firewall
|
||||||
|
|
||||||
|
# 删除 WAN 口防火墙规则
|
||||||
|
uci delete firewall.$wan_zone
|
||||||
|
uci commit firewall
|
||||||
|
|
||||||
|
# 关闭 LAN 口的 DHCP 服务并删除相关配置
|
||||||
|
uci set dhcp.lan.ignore='1'
|
||||||
|
uci delete dhcp.lan.leasetime
|
||||||
|
uci delete dhcp.lan.limit
|
||||||
|
uci delete dhcp.lan.start
|
||||||
|
uci commit dhcp
|
||||||
|
|
||||||
|
lan_ip=$(uci get network.lan.ipaddr)
|
||||||
|
echo "旁路网关配置完成 $lan_ip "
|
||||||
|
|
||||||
|
# 重启相关服务以应用更改
|
||||||
|
/etc/init.d/network restart
|
||||||
|
/etc/init.d/firewall restart
|
||||||
|
/etc/init.d/dnsmasq restart
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user