树莓派 Ubuntu 多网卡环境下如何自由切换默认的网络网关

本文介绍了如何在极摩客G3mini的ProxmoxVE8上配置iStoreOS虚拟机,实现无线热点和代理服务,并通过树莓派上的Ubuntu系统实现网络环境下的多网卡IP管理和灵活切换默认网关,包括使用shell脚本自动化这一过程。
摘要由CSDN通过智能技术生成

我的使用场景:

  • 在极摩客 G3 mini 主机上安装了 Proxmox VE 8 虚拟机系统,其中创建了 iStoreOS 虚拟机系统。
  • iStoreOS 虚拟机已经成功配置了网络,实现了无线热点和无线桥接功能,其无线热点的SSID为 “G3”。
  • iStoreOS 虚拟机上安装了 openClash,并成功配置和使用了代理服务。
  • 在树莓派上安装了 Ubuntu 系统,由于国内网络环境的不稳定性,需要随时切换默认网关,以便灵活地切换网络。

具体教程

相关内容请自己看注释修改

设置多网卡 IP

我的配置如下,树莓派连接 192.168.3.1 网关的网线并设置为默认网关,并且连接pve 虚拟机iStoreOS软路由的wifi,我的名称为 G3

网卡名称使用 ifconfigip a 查看

  • sudo vim /etc/netplan/00-cloud-init.yaml (建议 /etc/netplan 目录下在已有的配置上进行修改,如有需要,自行备份原来的内容)

    network:
      version: 2
      
      # WiFi 配置
      wifis:
        renderer: networkd
        wlan0: # 你自己的网卡名称
          access-points:
            G3: # WiFi 名称
              password: helloworld # WiFi 密码
          dhcp4: true # 使用 DHCP 获取 IP 地址
          optional: true
          addresses: [192.168.100.4/24] # 分配的 IP 地址及子网掩码
          nameservers:
            addresses: [8.8.8.8, 114.114.114.114] # DNS 服务器地址
      
      # 有线网卡配置
      ethernets:
        eth0:  # 你自己的网卡名称
          dhcp4: false # 禁用 DHCP
          addresses: [192.168.3.2/24] # 分配的 IP 地址及子网掩码
          nameservers:
            addresses: [8.8.8.8, 114.114.114.114] # DNS 服务器地址
          routes:
            - to: default
              via: 192.168.3.1 # 默认网关 IP 地址         
    
    • 通过配置如下选项,为默认网关

      routes:
              - to: default
                via: 192.168.3.1
      

切换网关

如果需要更换网关,走不同网关的网络,比如我连的 G3 网络,就是 iStoreOS clash代理的软路由

  1. 查看当前路由表:首先,您需要查看当前的路由表,以确保您知道正在使用的默认路由是通过哪个网络接口的。您可以使用下面的命令来查看路由表:

    $ ip route show
    default via 192.168.3.1 dev eth0
    default via 192.168.100.1 dev wlan0 proto dhcp src 192.168.100.119 metric 600
    

    这将显示当前的路由表,其中包括默认路由信息,您可以查看哪个网络接口被用于默认路由。

  2. 更改默认路由:接下来,您可以使用 ip route 命令手动更改默认路由。假设您想要将流量从以太网接口 (eth0) 切换到 WiFi 接口 (wlan0),您可以使用以下命令:

    sudo ip route del default via <当前默认网关的IP> dev eth0
    sudo ip route add default via <新的默认网关的IP> dev wlan0
    

    <当前默认网关的IP> 替换为当前默认路由的网关 IP 地址,将 <新的默认网关的IP> 替换为您想要设置为默认路由的新网关的 IP 地址。这将删除当前的默认路由并添加一个新的默认路由。

  3. 验证更改:最后,您可以再次运行 ip route show 命令来验证您的更改是否生效,确保新的默认路由已经正确地设置。

例如

将原本的使用 eth0 网口的 192.168.3.1 网关切换为使用 wlan0192.168.100.1 网关

# 先删除原来的路由
sudo ip route del default via 192.168.3.1 dev eth0
# 再添加新的路由
sudo ip route add default via 192.168.100.1 dev wlan0

如果需要换回来则

# 先删除原来的路由
sudo ip route del default via 192.168.100.1 dev wlan0 
# 再添加新的路由
sudo ip route add default via 192.168.3.1 dev eth0

一键切换脚本

当然也可以使用 Shell 脚本达到快速切换的目的

  • sudo vim ~/change_via.sh

    #!/bin/bash
    # 该脚本允许用户在运行 Ubuntu 的树莓派中轻松切换默认网关,适用于多网卡环境。
    # 检查提供的参数数量
    if [ "$#" -ne 2 ]; then
        echo "用法: $0 <网卡接口> <网关编号>"
        echo "示例: $0 wlan0 100"
        exit 1
    fi
    
    # 提取参数
    interface=$1
    gateway_number=$2
    
    # 根据提供的编号定义网关IP地址
    case $gateway_number in
        3) # 自己设置一个编号
            new_gateway="192.168.3.1" # 根据需要修改用于网络3的目标网关
            ;;
        100) # 自己设置一个编号
            new_gateway="192.168.100.1" # 根据需要修改用于网络100的目标网关
            ;;
        # 添加更多的网关编号和对应的目标网关地址
        *)
            echo "无效的网关编号,请选择合适的编号。"
            exit 1
            ;;
    esac
    
    # 获取当前默认网关的IP地址
    current_gateway=$(ip route show default | awk '/default/ {print $3}')
    
    # 检查当前默认网关是否已经是目标网关
    if [ "$current_gateway" == "$new_gateway" ]; then
        echo "默认路由已经使用 $new_gateway 通过 $interface 接口。"
        exit 0
    fi
    
    # 更改默认路由为目标网关
    sudo ip route change default via $new_gateway dev $interface
    
    echo "默认路由已更新为通过 $interface 接口使用 $new_gateway。"
    
    # 打印新的公共IP地址以验证更改
    echo "新的公共IP地址:"
    curl ipinfo.io   
    

    使用:

    $ ./change_via.sh wlan0 100  
    $ ./change_via.sh eth0 3 
    

要使脚本可以在任何目录下执行,您可以将脚本添加到系统的可执行路径中,例如 /usr/local/bin 目录。以下是如何完成这个步骤:

  1. 将脚本移动到可执行路径

    打开终端并执行以下命令:

    sudo mv ~/change_via.sh /usr/local/bin/
    

    这将把脚本移动到 /usr/local/bin/ 目录下,这个目录是系统默认的可执行路径之一。

  2. 设置执行权限

    确保脚本具有执行权限,如果没有,请添加执行权限:

    sudo chmod +x /usr/local/bin/change_via.sh
    
  3. 验证

    在终端中输入脚本名,看是否能够执行:

    change_via.sh
    

    如果没有出现权限错误并且脚本能够正常运行,那么您已经成功将脚本添加到系统的可执行路径中。您现在可以在任何目录下直接执行 change_via.sh 脚本了。

我的博客,欢迎前往: https://blog.ivwv.site/

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vvw&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值