Ubuntu虚拟机中设置NAT转发使开发板可以联网

  之前写过一篇《PC-开发板-Ubuntu虚拟机ping通三者的网络连接》讲解如何使用有线网络如何使PC、虚拟机和开发板能够相互Ping通,本文是其的升级版本, 不借助路由器,在相互能够Ping通的基础上,开发板也能够连接联网Ping某度。本文的主要操作是在ubuntu虚拟机中设置NAT转发,让NAT网络转发 PC-开发板-虚拟机桥接网络 中该网段的数据。虚拟机设置双网卡,网卡一为NAT模式,在NAT模式下,主机网卡与虚拟的NAT设备相连,虚拟的NAT设备与虚拟的DHCP服务器一起链接到虚拟交换机VMnet8中,实现虚拟机联网。另一网卡为桥接模式,桥接模式将主机网卡与虚拟的网卡利用虚拟交换机VMnet0进行通信。此外配置成NAT模式的能够联网的虚拟机网卡通过IPv4数据转发,使得通过网口连结的开发板实现数据联网。
基本网络拓扑结构如下图所示
在这里插入图片描述



1.PC端网络设置

1)配置Windows端以太网网络
在这里插入图片描述
2)设置静态IP
在这里插入图片描述

2. ubuntu端虚拟机网络配置

  ubuntu需要设置为双网卡,网卡一为NAT模式共享宿主机的网络用于联网,网卡二为桥接模式通过有线网口连结开发板。其中设置为NAT模式的网卡需要对桥接网络进行数据转发以达到开发板能也联网的目的。

2.1 NAT网卡设置

在这里插入图片描述

2.2 桥接网卡设置

在这里插入图片描述
并将桥接网络设置绑定为PC端以太网有线网卡。
在这里插入图片描述

2.3 设置网络转发

  inux系统具有数据包转发功能,即当主机拥有多块网卡时,其中一块网卡接受到的数据可以通过另一块网卡进行数据转发,相当于路由器的功能,所以我们需要在ubuntu虚拟机上启用IPv4转发。
在这里插入图片描述
  修改/etc/sysctl.conf文件,将“ net.ipv4.ip_forward = 1 ”设置为1,表示开启IPv4转发,同理,将其设置为0则表示禁止进行IP转发,设置完成之后,执行以下命令使得修改生效:

sudo sysctl -p

设置NAT转发表:

sudo iptables -t nat -A POSTROUTING -o ens33 -s 192.168.1.0/24 -j MASQUERADE

参数说明:

参数 描述
ens33 Ubuntu虚拟机中可以联网的网卡,用于IP转发之后的数据联网
192.168.1.0/24 开发板的IP地址所在网段,即192.168.1.0/24就代表了192.168.1.1至192.168.1.254;1)192.168.1.0是一个网段;2)24表示子网掩码为255.255.255.0;

设置之后可查看NAT转发表是否配置成功:

sudo iptables -t nat -nL

在这里插入图片描述
  上述配置是实时生效的,但是同时也是临时有效的,重启之后相关的配置就会失效,我们需要让其永久生效,需要将其写入配置文件中,ipstables配置完成之后的保存需要使用root权限,此时应该切换成root用户进行保存。

iptables-save > /etc/iptables-rules

  为了重启之后计算机能够自动进行配置,我们还需要对/etc/network/interfaces文件进行配置,增加以下内容,用于在重启之后自动加载之前保存的NAT转发表的规则iptables-rules文件。

pre-up iptables-restore < /etc/iptables-rules

3. 开发板端网络配置

3.1 临时配置

1)设置IP,当然了你也可以将IP设置为静态IP,这样就不需要每次重启之后都去ifconfig配置开发板的IP了。

ifconfig eth0 192.168.1.111

2)设置网关,注意:其中开发板的网关需要设置为虚拟机桥接网络的网卡的IP地址 ,我们使用虚拟机中的桥接网卡作为网关。

route add default gw 192.168.1.100

3)设置DNS,修改或新增/etc/resolv.conf文件,增加namesaver服务器.

nameserver 8.8.8.8

3.2 永久配置

  上述的配置重启之后均会失效,我们需要设置之后永久生效的话需要修改以下文件。通过 /etc/resolv.conf 文件配置 DNS 服务器的地址,不过目前该文件大部分是通过一些工具自动配置的,如 NetworkManager ,那么这就可能会导致在重启网络服务后该配置文件被刷新。此外也看到有建议修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,但是开发板中连sysconfig文件路径都没有,最后采取了以下手段,在系统的rcS脚本文件中添加DNS服务器文件。
1)添加IP和网关:修改文件/etc/network/interfaces,将dhcp动态获取IP方式修改为静态IP。

auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static
        address 192.168.1.111
        netmask 255.255.255.0
        gateway 192.168.1.100

2)修改启动脚本文件rcS,添加配置DNS指令。

#!/bin/sh


# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
psplash -n -f /dev/fb0 &
psplash-write "MSG start system ing ...."
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
        *.sh)
            # Source shell script for speed.
            (
                trap - INT QUIT TSTP
                set start
                . $i
            )
            ;;
        *)
            # No sh extension, so fork subprocess.
            $i start
            ;;
    esac
done

/bin/hostname -F /etc/hostname

#modify for DNS server update
echo nameserver 8.8.8.8 > /etc/resolv.conf

4. 测试验证

4.1 Ping主机

在这里插入图片描述

4.2 Ping虚拟机

在这里插入图片描述

4.3 Ping外网

在这里插入图片描述


  如有哪里错误的地方,欢迎指出!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33475105/article/details/123515708