vmware 虚拟机 使用命名空间创建虚拟网卡对。并通过该虚拟网卡进行ping 上外网

以下是分步指南,帮助您创建虚拟网卡并通过它访问互联网:
使用网络命名空间隔离,使得各自有自己的ip rule ip route 等

在这里插入图片描述


步骤 1:创建虚拟网卡对

# 创建一对虚拟网卡(veth0 和 veth1)
sudo ip link add veth0 type veth peer name veth1

# 启用网卡
sudo ip link set veth0 up
sudo ip link set veth1 up

# 分配 IP 地址
sudo ip addr add 192.168.200.1/24 dev veth0  # 主机端
sudo ip addr add 192.168.200.2/24 dev veth1  # 虚拟端

步骤 2:创建网络命名空间(隔离环境)

# 创建命名空间
sudo ip netns add test-ns

# 将 veth1 移入命名空间
sudo ip link set veth1 netns test-ns

# 在命名空间中启用网卡并配置
sudo ip netns exec test-ns ip link set lo up
sudo ip netns exec test-ns ip link set veth1 up
sudo ip netns exec test-ns ip addr add 192.168.200.2/24 dev veth1

步骤 3:配置 NAT 转发(让虚拟网卡访问外网)

# 启用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1

# 添加 iptables 规则
sudo iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens33 -j MASQUERADE
sudo iptables -A FORWARD -i veth0 -o ens33 -j ACCEPT
sudo iptables -A FORWARD -i ens33 -o veth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

插入:手动指定 DNS 服务器

# 在命名空间中直接指定 DNS 服务器(如 Google DNS)
sudo mkdir -p /etc/netns/test-ns
echo "nameserver 8.8.8.8" | sudo tee /etc/netns/test-ns/resolv.conf

# 重新测试 DNS 解析
sudo ip netns exec test-ns nslookup bing.com

步骤 4:在命名空间中测试联网

# 设置默认网关(指向主机端的 veth0)
sudo ip netns exec test-ns ip route add default via 192.168.200.1

# 测试 DNS 解析(确保能解析域名)
sudo ip netns exec test-ns ping -c 4 8.8.8.8        # 测试 IP 连通性
sudo ip netns exec test-ns nslookup bing.com        # 测试 DNS

# 通过虚拟网卡 ping 外网
sudo ip netns exec test-ns ping -c 4 bing.com

验证配置

# 查看虚拟网卡状态
ip addr show veth0      # 主机端
sudo ip netns exec test-ns ip addr show veth1  # 命名空间端

# 检查路由表
sudo ip netns exec test-ns ip route list

# 检查 iptables 规则
sudo iptables -t nat -L -nv

可能遇到的问题及解决

  1. 无法 ping 通外网

    • 检查 NAT 规则:sudo iptables -t nat -L -nv
    • 确认 IP 转发已启用:sysctl net.ipv4.ip_forward
    • 验证物理网卡名称是否为 ens33(根据您的 ip a 输出)
  2. DNS 解析失败

    # 手动指定 DNS 服务器
    echo "nameserver 8.8.8.8" | sudo tee /etc/netns/test-ns/resolv.conf
    
  3. 网络命名空间权限问题

    • 使用 sudo 执行所有命令
    • 确认内核版本支持网络命名空间(Linux 4.x+ 均支持)

最终效果

  • 虚拟网卡 veth1test-ns 命名空间中
  • 通过 192.168.200.2 IP 访问外网
  • 所有流量通过主机物理网卡 ens33 进行 NAT 转发

通过这种方式,您可以完全隔离虚拟网卡的网络环境,同时保持外网访问能力。

进入网络命名空间

使用 ip netns exec 命令进入已创建的命名空间(如 test-ns):

# 进入命名空间的交互式 shell
sudo ip netns exec test-ns bash

# 验证已进入命名空间(查看网卡)
ip addr show
# 预期输出:仅显示 veth1 和 lo 网卡

如何确认虚拟网卡是否实际处理流量(以 veth0/veth1 为例)

方法 1:使用 tcpdump 抓包(直接验证数据流)

在 主机端 抓取虚拟网卡的流量:


# 抓取 veth0 的 ICMP 流量(主机端)
sudo tcpdump -i veth0 icmp

# 抓取 veth1 的流量(需进入命名空间)
sudo ip netns exec test-ns tcpdump -i veth1 icmp

预期结果:
当在命名空间中执行 ping bing.com 时,若抓包显示 ICMP echo request 和 reply,则虚拟网卡工作正常。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值