364 lines
8.5 KiB
Bash
364 lines
8.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Debian 12 网络配置脚本
|
|
# 网络优化和配置
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# 日志函数
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 配置 DNS
|
|
configure_dns() {
|
|
log_info "配置 DNS 服务器..."
|
|
|
|
# 备份原始 resolv.conf
|
|
cp /etc/resolv.conf /etc/resolv.conf.backup
|
|
|
|
# 配置国内 DNS 服务器
|
|
cat > /etc/resolv.conf << 'EOF'
|
|
# EM Script Library - DNS Configuration
|
|
nameserver 223.5.5.5 # AliDNS
|
|
nameserver 223.6.6.6 # AliDNS
|
|
nameserver 119.29.29.29 # DNSPod
|
|
nameserver 182.254.116.116 # DNSPod
|
|
nameserver 114.114.114.114 # 114DNS
|
|
nameserver 8.8.8.8 # Google DNS (fallback)
|
|
nameserver 1.1.1.1 # Cloudflare DNS (fallback)
|
|
EOF
|
|
|
|
# 防止网络管理器覆盖 DNS 配置
|
|
if [[ -f /etc/NetworkManager/NetworkManager.conf ]]; then
|
|
sed -i '/\[main\]/a dns=none' /etc/NetworkManager/NetworkManager.conf
|
|
systemctl restart NetworkManager
|
|
fi
|
|
|
|
log_success "DNS 配置完成"
|
|
}
|
|
|
|
# 测试 DNS 解析速度
|
|
test_dns_speed() {
|
|
log_info "测试 DNS 解析速度..."
|
|
|
|
local domains=("www.baidu.com" "www.qq.com" "www.taobao.com" "www.github.com")
|
|
local dns_servers=(
|
|
"223.5.5.5|AliDNS"
|
|
"119.29.29.29|DNSPod"
|
|
"114.114.114.114|114DNS"
|
|
"8.8.8.8|Google"
|
|
"1.1.1.1|Cloudflare"
|
|
)
|
|
|
|
echo "DNS 服务器性能测试:"
|
|
echo "=========================================="
|
|
|
|
for dns_server in "${dns_servers[@]}"; do
|
|
local server=$(echo "$dns_server" | cut -d'|' -f1)
|
|
local name=$(echo "$dns_server" | cut -d'|' -f2)
|
|
|
|
local total_time=0
|
|
local success_count=0
|
|
|
|
for domain in "${domains[@]}"; do
|
|
local start_time=$(date +%s%N)
|
|
if nslookup "$domain" "$server" >/dev/null 2>&1; then
|
|
local end_time=$(date +%s%N)
|
|
local time_diff=$(( (end_time - start_time) / 1000000 ))
|
|
total_time=$((total_time + time_diff))
|
|
success_count=$((success_count + 1))
|
|
fi
|
|
done
|
|
|
|
if [[ $success_count -gt 0 ]]; then
|
|
local avg_time=$((total_time / success_count))
|
|
printf "%-12s %-10s %dms (成功: %d/%d)\n" "$server" "$name" "$avg_time" "$success_count" "${#domains[@]}"
|
|
else
|
|
printf "%-12s %-10s 失败\n" "$server" "$name"
|
|
fi
|
|
done
|
|
|
|
log_success "DNS 测试完成"
|
|
}
|
|
|
|
# 配置网络接口
|
|
configure_interfaces() {
|
|
log_info "配置网络接口..."
|
|
|
|
# 获取网络接口信息
|
|
local interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)
|
|
|
|
for interface in $interfaces; do
|
|
log_info "配置接口: $interface"
|
|
|
|
# 创建网络接口配置
|
|
cat > "/etc/network/interfaces.d/$interface" << EOF
|
|
# EM Script Library - Network Interface Configuration
|
|
auto $interface
|
|
iface $interface inet dhcp
|
|
|
|
# DNS 配置
|
|
dns-nameservers 223.5.5.5 223.6.6.6 119.29.29.29
|
|
dns-search local
|
|
|
|
# MTU 设置 (可选)
|
|
# mtu 1500
|
|
EOF
|
|
done
|
|
|
|
log_success "网络接口配置完成"
|
|
}
|
|
|
|
# 配置网络代理
|
|
configure_proxy() {
|
|
local proxy_type="$1"
|
|
local proxy_host="$2"
|
|
local proxy_port="$3"
|
|
|
|
if [[ -z "$proxy_host" || -z "$proxy_port" ]]; then
|
|
log_error "请提供代理主机和端口"
|
|
echo "用法: $0 proxy <类型> <主机> <端口>"
|
|
echo "类型: http, https, socks5"
|
|
return 1
|
|
fi
|
|
|
|
log_info "配置 $proxy_type 代理: $proxy_host:$proxy_port"
|
|
|
|
case $proxy_type in
|
|
http)
|
|
export http_proxy="http://$proxy_host:$proxy_port"
|
|
export https_proxy="http://$proxy_host:$proxy_port"
|
|
;;
|
|
https)
|
|
export http_proxy="https://$proxy_host:$proxy_port"
|
|
export https_proxy="https://$proxy_host:$proxy_port"
|
|
;;
|
|
socks5)
|
|
export http_proxy="socks5://$proxy_host:$proxy_port"
|
|
export https_proxy="socks5://$proxy_host:$proxy_port"
|
|
;;
|
|
*)
|
|
log_error "不支持的代理类型: $proxy_type"
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
# 配置系统代理
|
|
cat > /etc/environment << EOF
|
|
# EM Script Library - System Proxy Configuration
|
|
http_proxy=$http_proxy
|
|
https_proxy=$https_proxy
|
|
ftp_proxy=$http_proxy
|
|
no_proxy=localhost,127.0.0.1,::1,.local
|
|
EOF
|
|
|
|
# 配置 apt 代理
|
|
cat > /etc/apt/apt.conf.d/99proxy << EOF
|
|
# EM Script Library - APT Proxy Configuration
|
|
Acquire::http::Proxy "$http_proxy";
|
|
Acquire::https::Proxy "$https_proxy";
|
|
EOF
|
|
|
|
# 配置 wget 代理
|
|
cat > /root/.wgetrc << EOF
|
|
# EM Script Library - Wget Proxy Configuration
|
|
http_proxy=$http_proxy
|
|
https_proxy=$https_proxy
|
|
EOF
|
|
|
|
# 配置 curl 代理
|
|
cat > /root/.curlrc << EOF
|
|
# EM Script Library - Curl Proxy Configuration
|
|
proxy=$http_proxy
|
|
EOF
|
|
|
|
log_success "代理配置完成"
|
|
}
|
|
|
|
# 移除代理配置
|
|
remove_proxy() {
|
|
log_info "移除代理配置..."
|
|
|
|
unset http_proxy https_proxy ftp_proxy no_proxy
|
|
|
|
rm -f /etc/environment
|
|
rm -f /etc/apt/apt.conf.d/99proxy
|
|
rm -f /root/.wgetrc
|
|
rm -f /root/.curlrc
|
|
|
|
log_success "代理配置已移除"
|
|
}
|
|
|
|
# 测试网络连接
|
|
test_network() {
|
|
log_info "测试网络连接..."
|
|
|
|
local test_hosts=(
|
|
"223.5.5.5|阿里DNS"
|
|
"www.baidu.com|百度"
|
|
"www.qq.com|腾讯"
|
|
"www.github.com|GitHub"
|
|
"registry.npmmirror.com|NPM镜像"
|
|
"pypi.tuna.tsinghua.edu.cn|PyPI镜像"
|
|
)
|
|
|
|
echo "网络连接测试:"
|
|
echo "=========================================="
|
|
|
|
for host_info in "${test_hosts[@]}"; do
|
|
local host=$(echo "$host_info" | cut -d'|' -f1)
|
|
local name=$(echo "$host_info" | cut -d'|' -f2)
|
|
|
|
if ping -c 3 -W 3 "$host" >/dev/null 2>&1; then
|
|
local ping_time=$(ping -c 3 "$host" | tail -1 | awk '{print $4}' | cut -d'/' -f2)
|
|
printf "%-30s ✓ %s ms\n" "$name ($host)" "$ping_time"
|
|
else
|
|
printf "%-30s ✗ 连接失败\n" "$name ($host)"
|
|
fi
|
|
done
|
|
|
|
log_success "网络测试完成"
|
|
}
|
|
|
|
# 配置 IPv6
|
|
configure_ipv6() {
|
|
log_info "配置 IPv6 支持..."
|
|
|
|
# 启用 IPv6
|
|
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& ipv6.disable=0/' /etc/default/grub
|
|
sed -i 's/GRUB_CMDLINE_LINUX="[^"]*/& ipv6.disable=0/' /etc/default/grub
|
|
|
|
update-grub
|
|
|
|
# 配置 sysctl IPv6 参数
|
|
cat >> /etc/sysctl.d/99-custom.conf << 'EOF'
|
|
|
|
# IPv6 configuration
|
|
net.ipv6.conf.all.disable_ipv6 = 0
|
|
net.ipv6.conf.default.disable_ipv6 = 0
|
|
net.ipv6.conf.lo.disable_ipv6 = 0
|
|
EOF
|
|
|
|
sysctl -p
|
|
|
|
log_success "IPv6 配置完成,重启后生效"
|
|
}
|
|
|
|
# 显示网络信息
|
|
show_network_info() {
|
|
log_info "网络配置信息:"
|
|
|
|
echo "=== 网络接口 ==="
|
|
ip addr show
|
|
|
|
echo ""
|
|
echo "=== 路由表 ==="
|
|
ip route show
|
|
|
|
echo ""
|
|
echo "=== DNS 配置 ==="
|
|
cat /etc/resolv.conf
|
|
|
|
echo ""
|
|
echo "=== 网络连接 ==="
|
|
ss -tuln
|
|
|
|
echo ""
|
|
echo "=== 网络统计 ==="
|
|
ip -s link
|
|
}
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
cat << EOF
|
|
Debian 12 网络配置工具
|
|
|
|
用法: $0 [选项] [操作]
|
|
|
|
操作:
|
|
dns 配置 DNS 服务器
|
|
dns-test 测试 DNS 解析速度
|
|
interfaces 配置网络接口
|
|
proxy 配置网络代理
|
|
remove-proxy 移除代理配置
|
|
network-test 测试网络连接
|
|
ipv6 配置 IPv6 支持
|
|
info 显示网络信息
|
|
|
|
选项:
|
|
-h, --help 显示此帮助信息
|
|
|
|
示例:
|
|
$0 dns # 配置 DNS
|
|
$0 proxy http 127.0.0.1 8080 # 配置 HTTP 代理
|
|
$0 network-test # 测试网络连接
|
|
$0 info # 显示网络信息
|
|
|
|
EOF
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
local action="$1"
|
|
|
|
case $action in
|
|
dns)
|
|
configure_dns
|
|
;;
|
|
dns-test)
|
|
test_dns_speed
|
|
;;
|
|
interfaces)
|
|
configure_interfaces
|
|
;;
|
|
proxy)
|
|
shift
|
|
configure_proxy "$@"
|
|
;;
|
|
remove-proxy)
|
|
remove_proxy
|
|
;;
|
|
network-test)
|
|
test_network
|
|
;;
|
|
ipv6)
|
|
configure_ipv6
|
|
;;
|
|
info)
|
|
show_network_info
|
|
;;
|
|
""|-h|--help)
|
|
show_help
|
|
;;
|
|
*)
|
|
log_error "未知操作: $action"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
log_success "网络配置完成!"
|
|
}
|
|
|
|
# 执行主函数
|
|
main "$@" |