在我的办公室,有一个 Windows Server 2008 路由器,192.168.16.1,它是我们的默认网关。它通过我们的主要互联网连接发送数据。这很完美。
192.168.16.1 还具有另一个当前未使用的互联网连接。它连接到路由器 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
通过大量谷歌搜索,此错误消息似乎表明我无法访问 192.168.1.254 来设置路由,但我可以 ping 它。我尝试向 192.168.1.254 添加静态路由,效果很好,但这并没有解决问题(如预期的那样)。
我对网络的了解还不够深入,无法进一步诊断此问题,因为我的背景是软件开发,而不是系统管理。如果您能提供任何建议,我将不胜感激。
感谢您的时间。
答案1
桌面是否在 192.168.16.0/24 上?
您无法通过未直接连接的网关添加路由(到任何目标),因为您的计算机不知道如何在不通过默认路由的情况下找到通往路由器的路径。
答案2
您可以获得“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 方面遇到了类似的问题。 本地 -> dockerserver -> dockercontainer。添加主机路由然后添加网络路由使得路由在一个方向上工作。
这对我有帮助 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
答案3
关于在运行 Ubuntu 的 AWS EC2 实例中设置持久路由的问题部分,放置静态路由以在 AWS 重启、停止和启动后保持不变的正确位置是/etc/rc.local
。
在该文件中,您需要将路线放在最后一行上方。您的行应如下所示:
route add -net XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX gw XXX.XXX.XXX.XXX
运行该sudo
命令后重启将会丢失。