從同一主機的另一個介面對一個介面執行 ping 操作

從同一主機的另一個介面對一個介面執行 ping 操作

我有一台帶有兩個乙太網路介面的電腦(運行 Linux)。我想在不涉及另一台電腦的情況下測試它們。

設定:

  (192.168.1.5) eth1-------.
Linux PC/device            | loopback cable
  (192.168.1.6) eth2-------'

我跑

ping -I eth1 192.168.1.6

但沒有回覆。

我不明白問題是什麼。為什麼 Linux 會阻止這個操作?我要怎麼解決這個問題?

答案1

為什麼?

我無法完全解釋。


我要怎麼解決這個問題?

通常Linux 在內部到達本地分配的 IP 位址它確實有效。當一個人確實需要資料包傳輸到外部(例如通過電纜)並返回時,問題似乎就會出現——就像你的情況一樣。

您可以透過使用網路命名空間使其工作。我調整了我的另一個答案滿足您的需求。

筆記:

  • 我在 Debian 10 上進行了測試。
  • 命令所在的位置ip …您可能需要sudo ip ….為了方便閱讀,我省略了sudo.在提升的 shell 中工作或(暫時)定義alias ip='sudo ip'以便能夠輕鬆複製貼上。
  • 我假設沒有自動化幹擾,即沒有守護程序會嘗試以自己的方式配置相關介面。
  • 要在非預設網路命名空間中運行命令,我使用ip netns exec ….可以透過這種方式運行 shell;那麼從 shell 運行的所有內容都將使用網路名稱空間。ip netns exec …每當我們需要在非預設網路命名空間中運行某些東西時,都會使用這個答案。

像這樣進行:

  1. 定義有用的變數。這ns1是命名空間的任意名稱;eth1eth2是您要使用的設備。

    netns=ns1
    dev1=eth1
    dev2=eth2
    
  2. 建立新的網路命名空間。

    ip netns add "$netns"
    
  3. 將設備置於預設命名空間中。

    ip link set dev "$dev1" down
    ip link set dev "$dev2" down
    
  4. 將其中一台裝置新增至新命名空間(它將從預設命名空間中消失)。這裡我選擇移動$dev2到新的命名空間。

    ip link set dev "$dev2" netns "$netns"
    
  5. 分配 IP 位址。

                           ip address add 192.168.1.5/24 dev "$dev1"
    ip netns exec "$netns" ip address add 192.168.1.6/24 dev "$dev2"
    
  6. 確認兩台設備位於其應在的位置,並且具有正確的 IP 位址。

                           ip address show
    ip netns exec "$netns" ip address show
    # examine output
    
  7. 如果尚未完成,請使用電纜實際連接兩個介面。

  8. 調出接口。命名空間包含自己的環回設備lo。我提出它只是為了以防萬一,因為一般情況下程序可能想要依賴它。

                           ip link set dev "$dev1" up
    ip netns exec "$netns" ip link set dev "$dev2" up
    ip netns exec "$netns" ip link set dev      lo up
    
  9. 檢查路線。在我的 Debian 10 中,理智的路由會自動出現。這個命令

    ip route show
    

    列印(以及其他行)

    192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.5
    

    和這個命令

    ip netns exec "$netns" ip route show
    

    印刷

    192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.6
    
  10. 以一種或另一種方式進行 ping 操作。

                           ping 192.168.1.6
    ip netns exec "$netns" ping 192.168.1.5
    

    您可以使用-I,但不是必需的。此位址192.168.1.6未指派給預設網路命名空間中的任何介面;並且192.168.1.5未在非預設命名空間中分配。

就是這樣。它應該有效。我的測試表明這些ping確實使用了電纜。我可以這麼說,因為:

  • 斷開電纜會使它們停止流動;作為比較:即使沒有電纜,「內部」ping(從有線介面到自己的 IP 位址)也會流動;
  • iptraf-ng監控 ping 介面顯示 ICMP 回顯請求和 ICMP 回顯回應;作為比較:該工具不顯示有線介面的「內部」ping。

基本清理:刪除網路命名空間。

ip netns del "$netns"

這會將第二個裝置移回預設網路命名空間。

我們使用的命令都沒有實現永久性更改,因此如果出現任何問題,只需重新啟動即可。

相關內容