對伺服器 22.04.2 上的 netplan 路由進行故障排除

對伺服器 22.04.2 上的 netplan 路由進行故障排除

我正在尋找有關設置此網路的正確方法的一些指導。我有一個在 proxmox 上運行的 ubuntu 伺服器 22.04.2 實例。兩個介面連接到 VM,vlan 標記由 proxmox 處理。

我有兩個正在使用的 VLAN。 Ens18 為 100,ens19 為 300。

network:  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: true
      dhcp4-overrides:
        route-metric: 100
    ens19:
      dhcp4: true
      dhcp4-overrides:
        route-metric: 200

路線-n

Kernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.86.1    0.0.0.0         UG    100    0        0 ens18
0.0.0.0         192.168.254.1   0.0.0.0         UG    200    0        0 ens19
192.168.86.0    0.0.0.0         255.255.255.0   U     100    0        0 ens18
192.168.86.1    0.0.0.0         255.255.255.255 UH    100    0        0 ens18
192.168.86.16   0.0.0.0         255.255.255.255 UH    100    0        0 ens18
192.168.254.0   0.0.0.0         255.255.255.0   U     200    0        0 ens19
192.168.254.1   0.0.0.0         255.255.255.255 UH    200    0        0 ens19

如果配置

ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.86.28  netmask 255.255.255.0  broadcast 192.168.86.255
        inet6 fe80::ecc6:d9ff:fe43:6711  prefixlen 64  scopeid 0x20<link>
        ether ee:c6:d9:43:67:11  txqueuelen 1000  (Ethernet)
        RX packets 930  bytes 149307 (149.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 427  bytes 62104 (62.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


ens19: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.254.35  netmask 255.255.255.0  broadcast 192.168.254.255
        inet6 fe80::443a:61ff:fedc:4864  prefixlen 64  scopeid 0x20<link>
        ether 46:3a:61:dc:48:64  txqueuelen 1000  (Ethernet)
        RX packets 295  bytes 32942 (32.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1736 (1.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 84  bytes 6368 (6.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 84  bytes 6368 (6.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

雖然這種方法有效且 IP 位址是由路由器分配的,但存在非對稱路由的問題。從 vlan 100 上的電腦上,如果我啟動到 300 vlan 上的 IP 位址的 SSH 會話,大約一分鐘後就會逾時。根據我在谷歌搜尋後發現的內容,我(有限)理解伺服器正在採用最短路徑返回我的計算機,因為它在 vlan 100 子網路上有一個介面。

繼續閱讀讓我透過 netplan 建立靜態路由。我按照 netplan.io 上的指南並使用了此配置。

network:  version: 2
  renderer: networkd
  ethernets:
      ens18:
          addresses:
            - 192.168.86.28/24
          nameservers:
            addresses: [8.8.8.8]
          dhcp4: no
          routes:
            - to: default
              via: 192.168.86.1
            - to: 192.168.86.0/24
              via: 192.168.86.1
              table: 101
          routing-policy:
            - from: 192.168.86.0/24
              table: 101
      ens19:
          addresses:
            - 192.168.254.35/24
          nameservers:
            addresses: [8.8.8.8]
          dhcp4: no
          routes:
            - to: 192.168.254.0/24
              via: 192.168.254.1
              table: 102
          routing-policy:
            - from: 192.168.254.0/24
              table: 102

路線-n

Kernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.86.1    0.0.0.0         UG    0      0        0 ens18
192.168.86.0    0.0.0.0         255.255.255.0   U     0      0        0 ens18
192.168.254.0   0.0.0.0         255.255.255.0   U     0      0        0 ens19

如果配置

ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        
        inet 192.168.86.28  netmask 255.255.255.0  broadcast 192.168.86.255
        inet6 fe80::ecc6:d9ff:fe43:6711  prefixlen 64  scopeid 0x20<link>
        ether ee:c6:d9:43:67:11  txqueuelen 1000  (Ethernet)
        RX packets 566  bytes 98730 (98.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 101  bytes 12613 (12.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


ens19: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.254.35  netmask 255.255.255.0  broadcast 192.168.254.255
        inet6 fe80::443a:61ff:fedc:4864  prefixlen 64  scopeid 0x20<link>
        ether 46:3a:61:dc:48:64  txqueuelen 1000  (Ethernet)
        RX packets 40  bytes 4812 (4.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 964 (964.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 86  bytes 6566 (6.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 86  bytes 6566 (6.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


我仍然遇到相同的行為,即 ssh 會話在一兩分鐘後就會失敗。我還在虛擬機器上使用 node-red 實例對此進行了測試,大約一分鐘後看到了相同的行為。這似乎是 TCP 流量的類似問題。這是 Wireshark 追蹤的截圖。如果有用的話,我可以提供此日誌中的其他詳細資訊。

https://i.stack.imgur.com/GYgjq.jpg

編輯 03/27/23:我使用具有兩個實體介面的實體筆記型電腦嘗試了類似的實驗,看看問題是否與伺服器的虛擬化有關。使用相同的網路規劃我最終得到了相同的結果。此時問題似乎不是與VM 端的連線有關。

我的問題是:

我的網路規劃配置正確嗎?我不確定這是否是配置的預期結果以及路由看起來是否正確。如果不正確,我應該在哪裡進行調整?

如果它是正確的,那麼下一個地方會在哪裡調查這個問題。我嘗試過在虛擬機上使用僅訪問 vlan 300 的單一接口,但沒有任何問題。只有當跨 VLAN 且兩個介面都已啟動時,才會出現問題。如果我可以提供任何其他有用的信息,請告訴我。

先感謝您。

相關內容