![Ubuntu 18.04 网卡有两个IP地址](https://linux22.com/image/1007636/Ubuntu%2018.04%20%E7%BD%91%E5%8D%A1%E6%9C%89%E4%B8%A4%E4%B8%AAIP%E5%9C%B0%E5%9D%80.png)
我想了解如何设置具有两个 IP 地址的网卡
我尝试了如下方法,但是现在
网络: 版本:2 渲染器:NetworkManager 以太网: enp0s3: dhcp4:否 dhcp6:否 地址:[ 192.168.0.2/32, 172.16.0.2/16 ] 网关4:192.168.0.1 网关4:172.16.0.1 名称服务器: 搜索:[usp.br] 地址:[ 192.168.0.100, 192.168.0.102 ] 可选: true
每个 IP 都有自己的网关....
你能帮助我怎么做吗?
谢谢
答案1
为接口设置多个网关通常会带来问题。将数据包路由到一个网关,然后再路由到另一个网关可能会导致网络混乱,因此,除非您真的知道自己在做什么,否则最好使用单个默认网关。
简而言之,你通常只需要一个
gateway4: xx.xx.xx.xx
在您的配置中。
如果必须为接口的各个 IP 设置多条路由,则可以通过编写静态路由(并根据地址的优先级设置度量)来精确控制它们的行为方式,如下所示:
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: no
dhcp6: no
addresses: [ 192.168.0.2/32, 172.16.0.2/16 ]
nameservers:
search: [usp.br]
addresses: [ 192.168.0.100, 192.168.0.102 ]
routes:
- to: 0.0.0.0/0
via: 192.168.0.1
- to: 0.0.0.0/0
via: 172.168.0.1
你也不需要可选: true:只有当接口启动速度不够快时,它才会停止延迟启动,但考虑到您指定的静态地址,这应该不是问题。添加可选: true也有不阻止某些目标的副作用systemd,这可能意味着如果这些服务需要网络,服务器将不会立即启动所有应该启动的服务。
答案2
有点晚了,但是... 有 2 个默认网关没什么意义。想想看:如果我 ping 8.8.8.8,它应该使用哪个网关?
您可以设置优先级,如果一条线路较慢/更昂贵/仅用于备份/...如果两条线路具有相同的优先级,我怀疑它会尝试进行循环。
答案3
我最近遇到了完全相同的问题。我在这里看到了答案(来自 Mathieu Trudel-Lapierre),但它并没有真正解决问题。netplan 将发出一个错误,即一个路由表有两个默认路由。这样做是正确的:
800
要在路由表中添加表:sudo vi /etc/iproute2/rt_tables
在最后添加一行:
800 second_ip
你的 netplan 配置计划应该是:
network: version: 2 renderer: NetworkManager ethernets: enp0s3: dhcp4: no dhcp6: no addresses: [ 192.168.0.2/32, 172.16.0.2/16 ] nameservers: search: [usp.br] addresses: [ 192.168.0.100, 192.168.0.102 ] routes: - to: 0.0.0.0/0 via: 192.168.0.1 - to: 0.0.0.0/0 via: 172.16.0.1 table: 800 routing-policy: - from: 172.16.0.2 table: 800
这里需要注意的是,第一个网关(
192.168.0.1
)应该进入主表(即,我们没有指定routes/table:
),第二个网关进入800
表(routes/table: 800
)。我们必须routing-policy
对第二个 IP 地址(172.16.0.2
)使用 —— 有必要的是,如果数据包来自此 IP 地址,它们将准确地进入800
表并被发送到第二个网关(172.16.0.1
)。如果您只是运行
ping 8.8.8.8
,那么服务器需要了解从哪个 IP 地址向其发送数据包。在这种情况下,它将在表中搜索默认路由main
并找到网关192.168.0.1
,并且它将了解默认情况下从哪个 IP 地址发送数据包 - 来自192.168.0.2
。重要的是,如果表中没有default
路由main
(例如,如果我在另一个表中定义了第一个默认路由,例如801
) - 您将无法从服务器发起数据包(例如ping 8.8.8.8
) - 服务器将只能响应从外部发送到其 IP 地址的数据包。