Linux

無法設置靜態主機路由 - “SIOCADDRT:沒有這樣的過程”

  • December 14, 2016

在我的辦公室,有一個 Windows Server 2008 路由器 192.168.16.1,這是我們的預設網關。這通過我們的主要網際網路連接發送數據。這完美地工作。

192.168.16.1 還有另一個目前未使用的 Internet 連接。這連接到路由器 192.168.1.254,然後連接到我們的輔助網際網路連接。

我已經設置了路由和遠端訪問以將 192.168.1.* 範圍路由到我們的內部網路,並且我能夠從 IP 地址為 192.168.16.22 的桌面 ping 192.168.1.254。

我在同一個辦公室有一個非常密集的 linux 機器上傳和下載任務,所以我想設置一個靜態路由,這樣我就不會佔用我們的主要網際網路連接並影響我的同事。所以,我的計劃是用靜態路由設置這個盒子。

從 linux 機器上,我可以 ping 192.168.1.254,但我無法在我們的數據中心添加到目標伺服器的靜態路由:

$ sudo route add -host 123.123.123.123 gw 192.168.1.254 dev eth0
SIOCADDRT: No such process

通過廣泛的Google搜尋,此錯誤消息似乎表明我無法訪問 192.168.1.254 來設置路由,但我可以 ping 它。我嘗試添加到 192.168.1.254 的靜態路由,效果很好,但這並沒有解決問題(如預期的那樣)。

由於我的背景是軟體開發,而不是系統管理,因此我在網路方面還不夠先進,無法進一步診斷此問題。我將非常感謝您提供的任何建議。

感謝您的時間。

桌面是否在 192.168.16.0/24 上?

您無法通過未直接連接的網關添加路由(到任何目標),因為您的電腦不知道如何在不通過預設路由的情況下找到通往路由器的路徑。

如果“您在為處理該網路流量的網關設置主機路由之前嘗試為網路設置路由”,您可能會收到**“SIOCADDRT:無此類程序”錯誤。**

例如對於本地 -> 172.19.0.1 -> 172.19.0.xx

[root@local]# route add -net 172.19.0.0 gw 172.19.0.1 netmask 255.255.255.0 dev eth0
SIOCADDRT: No such process

**回答:**首先創建一個主機路由,然後創建一個網路路由。

例如對於有問題的網路:本地 -> 192.168.1.254 -> 123.123.123.123

sudo route add -host 192.168.1.254 dev eth0

sudo route add -net 123.123.123.123 netmask 255.255.255.255 gw 192.168.1.254 dev eth0

靜態路由仍會載入網路,我想這取決於;)。上傳/下載流量必須通過網路。所以它會影響網路的其他使用者。如果您希望減少對其他網路使用者的影響,您可以對流量進行頻寬限製或將流量轉移到更安靜的時間。例如 rsync 有很好的頻寬限制選項。

我在路由和 SIOCADDRT 方面遇到了類似的問題。 本地 -> 碼頭伺服器 -> 碼頭集裝箱。添加主機路由然後添加網路路由使路由單向工作。

這對我有幫助 https://support.symantec.com/en_US/article.TECH142841.html

完整的路由範例,路由雙向工作:

dockerserver=172.19.0.1
dockerservernet=172.19.0.0
dockercontainer=172.19.0.25
local=192.168.111.23
localnet=192.168.111.0

### 0. create host route for gw and net route local->docker
[root@local]# route add -host $dockerservernet dev eth0
[root@local]# route add -net $dockerservernet gw $dockerserver netmask 255.255.255.0 dev eth0

### 1. route on dockerserver to local
[root@dockerserver ~]# route add -net $localnet netmask 255.255.255.0 dev eno1
[root@dockerserver ~]# ping $local

### 2. route FROM dockercontainer to local (via gateway dockerserver)
[root@dockercontainer /]# route add -net $localnet netmask 255.255.255.0 gw gateway dev eth1
[root@dockercontainer /]# ping $local

引用自:https://serverfault.com/questions/201939