Loading

openwrt 首次启动脚本--无线中继

主要实现:

管理员密码设置

主机名设置

时区设置

无线连接上级wifi,同时支持ipv4 ipv6两个网络接口,设置防火墙

桥接lan wifi中继

关闭LAN接口DHCP,

关闭dnsmasq,

本例上级wifi是192.168.2.0/24网段

 

#luci-i18n-package-manager-zh-cn luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn relayd luci-proto-relay

#!/bin/sh

##############################################
# 集中式变量配置区(所有可调参数在此设置)
##############################################

### 系统基础配置 ###
ROOT_PASSWORD="12345678"     # 管理员密码
NETWORK_HOSTNAME="openwrt-print" # 设备主机名
TIMEZONE="UTC+8"               # 时区设置
ZONENAME="Asia/Shanghai"       # 时区名称

### 无线客户端配置 ###
WIFI_SSID='Openwrt_2.4G'       # 上级WiFi名称
WIFI_ENCRYPTION='psk2'         # 加密方式
WIFI_DEVICE='radio0'           # 无线设备名称
WIFI_BSSID='AA:BB:CC:DD:EE:FF' # 上级AP的MAC地址
WIFI_KEY='12345678'         # WiFi连接密码
WIFI_IFNAME='WifiClient'       # 无线接口名称
WIFI_NETWORK_v4='wlan4'        # 关联的网络接口
WIFI_NETWORK_v6='wlan6'        # 关联的网络接口

### 中继配置 ###
RELAY_PROTO='relay'           # 中继协议类型
RELAY_IP='192.168.2.3'        # 中继IP地址(上游网段,不冲突地址)
RELAY_NETMASK='255.255.255.0' # 中继子网掩码
RELAY_IFNAME='relay'          # 中继接口名称
RELAY_LOCAL_IFNAME='lan'      # 本地接口名称

### 防火墙配置 ###
FIREWALL_ZONE='lan'       # 目标防火墙区域

### 日志配置 ###
LOG_FILE="/root/deploy.log"    # 操作日志路径

##############################################
# 初始化核心逻辑(非必要请勿修改)
##############################################

### 函数定义 ###

# 简易日志记录(同时输出到控制台和日志文件)
log() {
  local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
  echo "[$timestamp] $1" | tee -a "$LOG_FILE"
}

# 错误处理函数
die() {
  log "执行失败:$1 (错误码:$2)"
  echo "! 初始化失败,请检查 $LOG_FILE !" >&2
  exit $2
}

### 执行流程 ###

log "=== 开始执行OpenWrt网络初始化脚本 ==="

##############################################
# 阶段 1/4:系统基础配置
##############################################
log "--- 阶段1/4:配置系统参数 ---"

# 设置root密码
if [ -n "${ROOT_PASSWORD}" ]; then
  if ! (echo -e "${ROOT_PASSWORD}\n${ROOT_PASSWORD}" | passwd root 2>&1 | tee -a "$LOG_FILE"); then
    die "密码设置失败,请检查复杂度" 101
  fi
  log "系统管理员密码已更新"
fi

# 配置基础系统参数
uci batch <<EOF 2>&1 | tee -a "$LOG_FILE" || die "系统参数写入失败" 102
set system.@system[0].hostname='${NETWORK_HOSTNAME}'
set system.@system[0].timezone='${TIMEZONE}'
set system.@system[0].zonename='${ZONENAME}'
commit
EOF
log "系统主机名与时区配置完成"

##############################################
# 阶段 2/4:无线客户端配置
##############################################
log "--- 阶段2/4:配置无线客户端 ---"

# 创建网络接口
uci set network.${WIFI_NETWORK_v4}=interface || die "创建IPv4接口失败" 201
uci set network.${WIFI_NETWORK_v4}.proto='static'
uci set network.${WIFI_NETWORK_v4}.ipaddr="${RELAY_IP}"
uci set network.${WIFI_NETWORK_v4}.netmask="${RELAY_NETMASK}"

uci set network.${WIFI_NETWORK_v6}=interface || die "创建IPv6接口失败" 202
uci set network.${WIFI_NETWORK_v6}.proto='dhcpv6'
uci set network.${WIFI_NETWORK_v6}.reqaddress='try'
uci set network.${WIFI_NETWORK_v6}.reqprefix='auto'
uci set network.${WIFI_NETWORK_v6}.norelease='1'
log "网络接口wlan4/wlan6初始化完成"

# 配置无线设备
uci set wireless.${WIFI_DEVICE}.disabled='0' || die "启用无线设备失败" 203
uci set wireless.${WIFI_DEVICE}.cell_density='0'

# 配置STA模式
uci set wireless.default_${WIFI_DEVICE}.disabled='0'
uci set wireless.default_${WIFI_DEVICE}.mode='sta'
uci set wireless.default_${WIFI_DEVICE}.bssid="${WIFI_BSSID}"
uci set wireless.default_${WIFI_DEVICE}.ifname="${WIFI_IFNAME}"
uci set wireless.default_${WIFI_DEVICE}.ipv6='1'
uci set wireless.default_${WIFI_DEVICE}.device="${WIFI_DEVICE}"
uci set wireless.default_${WIFI_DEVICE}.ssid="${WIFI_SSID}"
uci set wireless.default_${WIFI_DEVICE}.encryption="${WIFI_ENCRYPTION}"
uci set wireless.default_${WIFI_DEVICE}.key="${WIFI_KEY}"
uci set wireless.default_${WIFI_DEVICE}.network="${WIFI_NETWORK_v4} ${WIFI_NETWORK_v6}"
log "无线客户端配置完成(SSID:${WIFI_SSID})"

##############################################
# 阶段 3/4:中继桥配置
##############################################
log "--- 阶段3/4:配置中继桥接 ---"

# 创建中继接口
uci set network.${RELAY_IFNAME}=interface || die "创建中继接口失败" 301
uci set network.${RELAY_IFNAME}.proto="${RELAY_PROTO}"
uci set network.${RELAY_IFNAME}.ipaddr="${RELAY_IP}"
uci set network.${RELAY_IFNAME}.netmask="${RELAY_NETMASK}"

# 绑定桥接网络
uci add_list network.${RELAY_IFNAME}.network="${RELAY_LOCAL_IFNAME}"
uci add_list network.${RELAY_IFNAME}.network="${WIFI_NETWORK_v4}"
uci add_list network.${RELAY_IFNAME}.network="${WIFI_NETWORK_v6}"
log "中继桥接规则已绑定"

##############################################
# 阶段 4/4:防火墙与服务配置
##############################################
log "--- 阶段4/4:配置防火墙策略 ---"

# 调整防火墙区域
uci add_list firewall.@zone[0].network="${WIFI_NETWORK_v4}" || die "防火墙配置失败" 401
uci add_list firewall.@zone[0].network="${WIFI_NETWORK_v6}"

# 删除防火墙区域wan
uci delete firewall.@zone[1]

# 禁用LAN DHCP
uci set dhcp.lan.ignore='1'

# 禁用dnsmasq
/etc/init.d/dnsmasq disable && log "已禁用DNSmasq服务"
/etc/init.d/dnsmasq stop && log "已停止DNSmasq进程"

# 提交配置变更
uci commit || die "配置提交失败" 402
log "所有配置已提交"

# 重启防火墙
service firewall restart || die "防火墙重启失败" 403
log "防火墙服务已重启"


##############################################
# 完成提示
##############################################
log "=== 网络初始化脚本执行完毕 ==="
echo "----------------------------------------"
echo "  执行结果:"
echo "  中继IP:$RELAY_IP"
echo "  日志路径:$LOG_FILE"
echo "----------------------------------------"
exit 0

 

posted @ 2025-04-05 13:00  上官飞鸿  阅读(377)  评论(0)    收藏  举报