通过Ubuntu和i.MX 6ULL开发板实现网络共享

目录

第一部分:在Ubuntu主机上进行永久配置

步骤1:配置网络接口 (netplan)

步骤2:开启IP转发功能 (sysctl)

步骤3:设置防火墙转发规则 (iptables)

步骤4:永久保存防火墙规则

[第二部分:在i.MX 6ULL开发板上进行永久配置](#第二部分:在i.MX 6ULL开发板上进行永久配置)

第三部分:最终验证

第四部分:常见问题与排错指南 (Troubleshooting)

问题一:在Ubuntu上应用netplan配置后,PC自己无法上网了

[问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0](#问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0)

问题三:在开发板上执行网络重启命令(如ifdown/ifup)卡住或报错

第五部分:实现开机自动配置网络(终极方案)

步骤1:创建启动脚本

步骤2:编写脚本内容

步骤3:赋予脚本执行权限

步骤4:设置开机自启动 (通用方法)

步骤5:重启并验证


本文档提供一套完整、可靠的命令行方案,用于将您Ubuntu虚拟机的网络永久共享给i.MX 6ULL开发板。此方法将绕开图形界面中可能存在的BUG。

第一部分:在Ubuntu主机上进行永久配置

步骤1:配置网络接口 (netplan)

这是最关键的一步,它将为您的两个网卡分配正确的角色。

  1. 打开配置文件

    复制代码
    sudo nano /etc/netplan/01-network-manager-all.yaml
  2. 替换为以下内容: 请删除文件里的所有旧内容,然后完整地复制并粘贴以下配置。这个配置明确区分了两个网卡的功能。

    复制代码
    network:
      version: 2
      renderer: NetworkManager
      ethernets:
        ens33: # 这是连接开发板的网卡
          dhcp4: no
          addresses: [192.168.10.1/24]
        ens37: # 这是您上网用的网卡
          dhcp4: true
  3. 保存并应用

    • 按下 Ctrl + X -> 按 Y -> 按 Enter 保存并退出。

    • 执行 sudo netplan apply 使配置生效。

    • 验证 :执行 ping www.baidu.com,确保您的Ubuntu电脑现在可以正常上网。

步骤2:开启IP转发功能 (sysctl)

这允许您的电脑像路由器一样转发数据包。

  1. 编辑配置文件

    复制代码
    sudo nano /etc/sysctl.conf
  2. 取消注释 :在文件中找到 #net.ipv4.ip_forward=1 这一行,删掉它前面的 # 号。

  3. 保存并生效 :保存文件后,执行 sudo sysctl -p 使其立即生效。

步骤3:设置防火墙转发规则 (iptables)

这会告诉防火墙,允许来自开发板的数据包通过您的电脑访问互联网。

  1. 一次性执行以下三条命令

    复制代码
    sudo iptables -t nat -A POSTROUTING -o ens37 -j MASQUERADE
    sudo iptables -A FORWARD -i ens33 -o ens37 -j ACCEPT
    sudo iptables -A FORWARD -i ens37 -o ens33 -m state --state RELATED,ESTABLISHED -j ACCEPT
步骤4:永久保存防火墙规则
  1. 安装保存工具

    复制代码
    sudo apt-get install iptables-persistent
  2. 保存规则 :在安装过程中,系统会弹出窗口询问是否保存当前的IPv4和IPv6规则,请两次都选择 <是 Yes>

第二部分:在i.MX 6ULL开发板上进行永久配置

现在,通过串口登录到您的开发板,进行以下设置。

  1. 编辑网络配置文件

    复制代码
    vi /etc/network/interfaces
  2. 修改为静态IP配置 : 使用 vi 编辑器,将文件内容修改为如下所示:

    复制代码
    auto eth0
    iface eth0 inet static
        address 192.168.10.101
        netmask 255.255.255.0
        gateway 192.168.10.1
        dns-nameservers 8.8.8.8
  3. 重启开发板 : 修改并保存文件后,执行 reboot 命令重启开发板。

第三部分:最终验证

重启完成后,您的所有网络配置都已永久生效。

  1. 在Ubuntu电脑上,通过SSH连接到开发板:

    复制代码
    ssh root@192.168.10.101
  2. 成功登录后,在开发板终端中测试网络:

    复制代码
    ping www.baidu.com

第四部分:常见问题与排错指南 (Troubleshooting)

在配置过程中,我们可能会遇到各种问题。本章节记录了常见问题的现象、原因及最终解决方案。

问题一:在Ubuntu上应用netplan配置后,PC自己无法上网了
  • 现象 : ping www.baidu.com 提示"暂时不能解析域名"。

  • 原因 : netplan的新配置没有为上网网卡(ens37)指定DNS服务器,导致系统不知道去哪里查询域名。

  • 解决方案 : 在 netplan 配置文件中,为 ens37 添加 nameservers 配置。不过,本教程最终版的 netplan 配置已通过 renderer: NetworkManagerdhcp4: true 解决了此问题,这是更稳定可靠的方式。

问题二:重启开发板后,网络不通,route -n显示的网关是0.0.0.0
  • 现象: 开发板无法ping通任何外部地址,路由表里没有默认网关。

  • 原因 : 开发板的操作系统在启动时,没有自动执行网络配置脚本来读取 /etc/network/interfaces 文件中的设置。这在一些精简的嵌入式系统中很常见。

  • 解决方案: 手动应用所有网络设置。这也是我们最终成功的关键。

    1. 手动配置IP地址:

      复制代码
      ifconfig eth0 192.168.10.101 netmask 255.255.255.0
    2. 手动添加网关 (最关键的一步):

      复制代码
      route add default gw 192.168.10.1
    3. 手动配置DNS:

      复制代码
      echo "nameserver 8.8.8.8" > /etc/resolv.conf
问题三:在开发板上执行网络重启命令(如ifdown/ifup)卡住或报错
  • 现象 : 执行 ifdown eth0 命令后终端卡住,或执行 /etc/init.d/networking restart 提示文件不存在。

  • 原因: 您的嵌入式Linux系统非常精简,可能没有安装完整的网络管理工具套件,或者脚本在等待一个不存在的网络事件,从而导致卡死。

  • 解决方案 : 放弃使用这些高层级的管理脚本,直接使用问题二中提到的 ifconfigroute 等底层命令进行手动配置。

第五部分:实现开机自动配置网络(终极方案)

本章节为"问题二"提供一个一劳永逸的自动化解决方案。我们将创建一个脚本,让开发板在每次开机时自动执行网络配置命令。

步骤1:创建启动脚本

在您的开发板终端(通过串口连接)中,创建一个新的脚本文件。

复制代码
vi /etc/init.d/autonet.sh
步骤2:编写脚本内容

使用 vi 编辑器,将以下内容完整地写入到新创建的文件中。

复制代码
#!/bin/sh

### BEGIN INIT INFO
# Provides:          autonet
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Manually configures network at boot
# Description:       Ensures eth0 is configured with a static IP, gateway, and DNS.
### END INIT INFO

echo "Starting manual network configuration for eth0..."

# 1. 设置IP地址
ifconfig eth0 192.168.10.101 netmask 255.255.255.0

# 2. 设置网关
route add default gw 192.168.10.1

# 3. 设置DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf

echo "Manual network configuration applied."

exit 0
步骤3:赋予脚本执行权限

让这个新创建的脚本变得可以执行。

复制代码
chmod +x /etc/init.d/autonet.sh
步骤4:设置开机自启动 (通用方法)

由于 update-rc.drc.d 目录在您的系统上都不可用,我们将使用一个更通用、更可靠的方法:修改全局配置文件

  1. 打开全局配置文件 : 在您的开发板终端 中,执行以下命令打开 profile 文件。这个文件在每次用户登录时都会被执行。

    复制代码
    vi /etc/profile
  2. 在文件末尾添加脚本路径 : 使用 vi 编辑器,移动到文件的最末尾,添加新的一行,内容如下:

    复制代码
    /etc/init.d/autonet.sh
    • 说明 : 这样,每次系统启动并自动登录到控制台时,都会执行这个 profile 文件,从而运行我们的网络配置脚本。
  3. 保存并退出 : 按 Esc -> 输入 :wq -> 按 Enter

步骤5:重启并验证

现在,执行 reboot 命令重启您的开发板。重启完成后,您应该可以直接 通过网络 ssh root@192.168.10.101 连接,而无需再通过串口进行任何手动配置。

相关推荐
木法星人17 分钟前
Ubuntu安装nvm(无需梯子自动连接github下载安装)
ubuntu·nvm·1024程序员节
卓码软件测评36 分钟前
软件可用性测试历史概念✅软件可用性测试的国际标准✅软件可用性测试方法
数据库·单元测试·可用性测试·软件需求
R.lin1 小时前
OSS服务模块-基于数据库配置的Java OSS服务解决方案,支持MinIO、七牛云、阿里云和腾讯云
java·数据库·后端·mysql
落羽的落羽1 小时前
【Linux系统】从零掌握make与Makefile:高效自动化构建项目的工具
linux·服务器·开发语言·c++·人工智能·机器学习·1024程序员节
TG:@yunlaoda360 云老大1 小时前
腾讯云国际站WAF:如何在腾讯云WAF上设置CC攻击防护,以保障业务数据免被恶意爬取?
服务器·云计算·腾讯云
橄榄熊1 小时前
使用VScode 插件,连接MySQL,可视化操作数据库
数据库·mysql
自由会客室1 小时前
Ubuntu24安装MongoDB7
数据库·mongodb
蜡笔小炘1 小时前
SQL sever数据库--第二次作业
数据库·sql·oracle
Mr.H01272 小时前
gitbash链接远程仓库时,出现的ssh密钥链接问题
运维·服务器·ssh·bash
宇宙浪子2 小时前
在 UOS(统信操作系统,基于 Debian/Ubuntu 体系)上编译 OpenCV 4.10.0
opencv·ubuntu·debian