将网络命名空间连接到互联网

将网络命名空间连接到互联网

我的场景是这样的:我希望能够在具有自己的网络接口的单独命名空间中执行程序。但我也希望它能够通过我的物理网络接口访问互联网。到目前为止,这是我的代码:

ip netns add private_ns
ip link add link eth1 name eth1.100 type vlan id 100
ip link set eth1.100 netns private_ns
ip netns exec private_ns ip addr add 10.1.1.1/24 dev eth1.100
ip netns exec private_ns ip link set eth1.100 up

然后我尝试:

ip netns exec private_ns ping 8.8.8.8

我得到connect: Network is unreachable

答案1

每个网络命名空间都是网络堆栈的单独逻辑副本。因此,您需要将网络命名空间视为一台单独的机器。

要通过当前机器将新机器连接到互联网,您需要

    1. 在每台计算机中选择一个未使用的网卡(或安装一个新网卡)。
    1. 用网线将它们连接在一起。
    1. 在以太网桥接、普通 IP 路由或 NAT 之间进行选择。
  • 4a.对于以太网桥接,将现有计算机中的新网卡添加到适当的网桥,并为辅助计算机中的网卡提供网桥所在子网中的 IP。
  • 4b.对于传统 IP 路由,请为新链路选择一个 IP 块。分配该块中的接口 IP,确保在现有计算机上启用 IP 转发,确保网络的其余部分了解新子网,并确保 iptables 规则(如果有)允许流量流动。
  • 4c.对于 NAT,为新链接选择一个 IP 块。分配该块中的接口 IP,确保在现有计算机上启用 IP 转发,确保您的 IPtables 规则允许流量流动,并为从新子网到外部主机的流量设置 SNAT 或 MASQURADE 规则。
    1. 在新计算机上设置适当的默认网关。

使用网络命名空间时也是如此。

    1. 在主网络命名空间中创建一个 veth 对。
    1. 将 veth 对的一端移至辅助网络命名空间。
    1. 在以太网桥接、普通 IP 路由或 NAT 之间进行选择。
  • 4a. 对于以太网桥接,将主网络命名空间中的新 veth 添加到适当的桥接器,并为新网络命名空间中的 veth 提供桥接器所在子网中的 IP。
  • 4b.对于传统 IP 路由,请为新链路选择一个 IP 块。分配该块中的接口 IP,确保在现有计算机上启用 IP 转发,确保网络的其余部分了解新子网,并确保 iptables 规则(如果有)允许流量流动。
  • 4c.对于 NAT,为新链接选择一个 IP 块。分配该块中的接口 IP,确保在现有计算机上启用 IP 转发,确保您的 IPtables 规则允许流量流动,并为从新子网到外部主机的流量设置 SNAT 或 MASQURADE 规则。
    1. 在辅助网络命名空间中设置适当的默认网关。

(对丑陋的格式感到抱歉,如果您比我更有 Markdown 技能,请随时修复它)

相关内容