这是我的情况:
我有两个不同的网络接口,每个接口都有自己的静态公网和私网 IP(IPv4),连接到单个虚拟网络,该虚拟网络连接到单个虚拟机。我希望能够将eth1
辅助网络接口分配给自己的网络命名空间,然后使用该命名空间执行将信息发送到 MySQL 数据库的 Python 应用程序。
本质上,我想在单个虚拟机上同时运行两个应用程序,但在不同的命名空间中运行它们,以便我的数据库从两个不同的公共 IP 地址接收查询。使用命名空间是我能找到的最佳选择。我已经对 Python 部分进行了排序(我正在使用 netns 的 Python 包装器),但我对命名空间的名称服务器感到困惑。
我正在执行以下命令来创建命名空间:
>> sudo ip netns add 001
>> sudo ip link set eth1 netns 001
>> sudo ip netns exec 001 ip link set eth1 up
然后我尝试 pinggoogle.com
并收到以下错误:
ping: google.com: Temporary failure in name resolution
我知道我遗漏了一些东西,我承认在网络方面我是个菜鸟。任何帮助我都会很感激。
供参考:我使用 Azure 云服务来完成所有这些工作。两个网络接口上的 DNS 服务器都设置为从虚拟网络继承并且 IP 转发已禁用。虚拟网络的地址空间10.0.0.0/24
为主接口(eth0
)使用10.0.0.4
和辅助接口(eth1
)使用10.0.0.5
。
编辑:我想我已经掌握了网络路由的理解,但我又遇到了另一个错误。
>> sudo ip netns add 001
>> sudo ip link set eth1 netns 001
>> sudo ip netns exec 001 ip link set eth1 up
>> sudo ip netns exec 001 ip addr add 10.0.0.5/24 dev eth1
的默认网关eth0
是10.0.0.1
,因此我假设我会将eth1
的默认网关设置为相同的地址,因为它们共享同一个虚拟网络。
>> sudo ip netns exec 001 ip route add default via 10.0.0.1 dev eth1
Error: Nexthop has invalid gateway.