-1

我的最终目标:我想在我的树莓派上运行一些使用 VPN 连接的应用程序。所有其他应用程序应直接连接到互联网,无需 VPN。我希望能够灵活地与不同的 VPN 提供商合作。

在将它应用到我的 Raspberry Pi 之前,我正在运行 Ubuntu 20.04 LTS 的虚拟机上进行测试。

我的做法:

  1. 创建网络命名空间。
  2. 命名空间中虚拟适配器的 IP 地址应该是动态的(来自路由器的 dhcp)。在研究 dhcp 细节之前,我将开始使用静态 IP 进行测试。
  3. 1. 和 2. 运行并连接网络命名空间中的 vpn 客户端。
  4. 在网络命名空间中运行应用程序。

我已阅读虚拟网络的 Linux 接口简介,并相信 MACVLAN 是正确的方法。我创建了以下脚本来设置命名空间和虚拟网络:

#!/bin/bash

# Bring eth0 down
ip link set eth0 down

# Enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Load Bridge module
modprobe br_netfilter

# Bring eth0 up
ip link set eth0 up

# Create namespace
ip netns add nsvpn

# Bring up loopback
ip netns exec nsvpn ip link set lo up

# Add Mac VLan Interface in bridge mode
ip link add macvlanvpn link eth0 type macvlan mode bridge

# Link Mac VLan Interface to namespace
ip link set macvlanvpn netns nsvpn

# Bring up Mac VLan Interface
ip netns exec nsvpn ip link set macvlanvpn up

# Set IP Address on Mac VLan Interface
ip netns exec nsvpn ip addr add 10.11.12.200/24 dev macvlanvpn

# Add gateway route
ip netns exec nsvpn ip route add default via 10.11.12.1

运行脚本后,创建了命名空间,我可以 ping 10.11.12.200(虚拟接口的 IP 地址)。当我尝试 ping 网关10.11.12.1时,我得到Destination Host Unreachable.

我是这么想的,eth0现在macvlanvpn应该桥接。我错过了什么?

eth0有 IP 地址10.11.12.101,由 dhcp 分配。网关和 dhcp 服务器是10.11.12.1.

我也试过了mode passthru。当我尝试时,我可以访问网关和互联网。这个解决方案有一些缺点。它在硬件和虚拟接口上使用相同的 MAC 地址。当我使用ip命令更改MAC地址时,另一个的MAC地址也被更改。因此我不能使用 dhcp 来分配 IP 地址。

4

0 回答 0