3. 边缘网关网络连接与静态IP配置

边缘网关网络连接与静态IP配置 学习卡片

任务说明

本案例面向基于Linux的边缘网关设备(以Debian/Ubuntu系统为例),完成以下目标:配置有线以太网或无线Wi-Fi连接,将网关IP设置为静态地址,确保局域网内可稳定访问,并验证与外网的连通性。最终交付可直接在目标网关上执行的配置脚本与验证命令。

网络拓扑与配置目标

边缘网关 eth0: 192.168.1.100/24 wlan0: 192.168.1.101/24 (二选一启用) 局域网交换机 /24 网段 路由器/网关 192.168.1.1 Internet 有线 eth0 无线 wlan0 默认网关 管理PC ping 网关IP

本案例采用静态IP方案:网关通过有线(eth0)或无线(wlan0)接入局域网,IP地址固定为192.168.1.100/24(有线)或192.168.1.101/24(无线),默认网关为192.168.1.1,DNS使用114.114.114.114。管理PC通过该网段访问网关。

实现代码

以下脚本configure_network.sh自动检测可用接口并完成静态IP配置,支持有线/无线两种模式:


#!/bin/bash
# 文件: configure_network.sh
# 功能: 边缘网关静态IP配置(有线/无线自动检测)
# 适用: Debian/Ubuntu (netplan)

set -e

# ---------- 配置参数 ----------
STATIC_IP_ETH="192.168.1.100/24"
STATIC_IP_WLAN="192.168.1.101/24"
GATEWAY="192.168.1.1"
DNS_SERVERS="114.114.114.114,8.8.8.8"
WIFI_SSID="your_wifi_ssid"       # 按需修改
WIFI_PASSWORD="your_wifi_password" # 按需修改

# ---------- 检测无线网卡 ----------
detect_wifi() {
    if iw dev 2>/dev/null | grep -q "Interface"; then
        echo "wlan0"
    else
        echo ""
    fi
}

# ---------- 生成netplan配置 ----------
generate_netplan() {
    local iface="$1"
    local ip="$2"
    local wifi_conf=""

    if [ "$iface" = "wlan0" ]; then
        wifi_conf="
            wifi:
                wlan0:
                    dhcp4: false
                    addresses: [$ip]
                    routes:
                      - to: default
                        via: $GATEWAY
                    nameservers:
                      addresses: [$DNS_SERVERS]
                    access-points:
                        \"$WIFI_SSID\":
                            password: \"$WIFI_PASSWORD\""
    else
        wifi_conf="
            ethernets:
                eth0:
                    dhcp4: false
                    addresses: [$ip]
                    routes:
                      - to: default
                        via: $GATEWAY
                    nameservers:
                      addresses: [$DNS_SERVERS]"
    fi

    cat > /etc/netplan/99-static.yaml <<EOF
network:
  version: 2
  renderer: networkd
$wifi_conf
EOF
}

# ---------- 主流程 ----------
main() {
    # 检查root权限
    if [ "$EUID" -ne 0 ]; then
        echo "请使用sudo运行此脚本"
        exit 1
    fi

    # 检查netplan
    if ! command -v netplan > /dev/null; then
        echo "错误: 未检测到netplan,本脚本仅支持Ubuntu/Debian netplan系统"
        exit 1
    fi

    # 检测有线接口
    ETH_IFACE=$(ls /sys/class/net | grep -E "^eth|^en" | head -1 || true)
    WIFI_IFACE=$(detect_wifi)

    echo "检测到有线接口: ${ETH_IFACE:-无}"
    echo "检测到无线接口: ${WIFI_IFACE:-无}"

    # 优先配置有线,无有线则配置无线
    if [ -n "$ETH_IFACE" ]; then
        echo ">>> 配置有线静态IP: $STATIC_IP_ETH"
        generate_netplan "eth0" "$STATIC_IP_ETH"
    elif [ -n "$WIFI_IFACE" ]; then
        echo ">>> 配置无线静态IP: $STATIC_IP_WLAN"
        generate_netplan "wlan0" "$STATIC_IP_WLAN"
    else
        echo "错误: 未检测到可用网络接口"
        exit 1
    fi

    # 应用配置
    netplan apply
    echo ">>> 网络配置已应用"

    # 显示当前IP
    ip -4 addr show | grep -E "inet " | grep -v "127.0.0.1"
}

main "$@"

执行与验证

执行配置:


# 赋予执行权限并运行
chmod +x configure_network.sh
sudo ./configure_network.sh

验证步骤与判定标准:

验证项命令通过标准
静态IP生效ip addr show eth0 或 ip addr show wlan0显示配置的静态IP(如192.168.1.100/24),无DHCP分配地址
默认路由ip route存在 default via 192.168.1.1 条目
局域网连通从管理PC执行 ping 192.168.1.100收到ICMP回复,丢包率0%
外网连通ping -c 4 114.114.114.1144个包全部回复,0%丢包
DNS解析nslookup baidu.com 或 getent hosts baidu.com返回域名对应的IP地址
重启持久化sudo reboot 后再次检查IP重启后IP仍为静态配置值

故障排查提示:若配置后无法连通外网,依次检查:① 网关地址是否与路由器LAN口IP一致;② 路由器是否开启DHCP静态绑定冲突;③ 无线连接时确认SSID与密码正确且信号强度足够;④ 使用sudo netplan try代替apply可在配置错误时自动回滚。