无法在我的 Ubuntu 中添加静态路由,SIOCADDRT:网络无法访问

无法在我的 Ubuntu 中添加静态路由,SIOCADDRT:网络无法访问

我正在尝试在我的 VPS 中向位于我的 VPS 的 VPN 隧道另一端的客户端添加静态路由,并通过隧道转发其流量。

这是我计划添加路线的目的地的设置。 Raspi 充当路由器,其本身连接到 AP,NAS 连接到 Raspi 并通过 VPN 隧道重定向其流量:

                                        +--------------------------------+
                                        |            Raspi               |
                      (192.168.0.101/24)|                                |(192.168.1.1/24)
 (192.168.0.1/24) AP<>=================={wlan0                       eth0}================<>NAS (192.168.1.102/24)
                                        |   \                        /   |
                                        |    +----------------------+    |
                                        |    |     iptables and     |    |
                                        |    |    routing engine    |    |
                                        |    +-----------+----------+    |
                                        |                |               |
                                        |             {tun0}             |
                                        |            10.8.0.6            |
                                        +--------------------------------+

我正在尝试这样做route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.8.0.6,以便与 Raspi 后面的 NAS 进行通信,但我得到了SIOCADDRT: Network is unreachable

这些是服务器端信息:

$ ifconfig -a

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:217.B.C.D  Bcast:217.B.C.D  Mask:255.255.255.255
          inet6 addr: XXXX::XXX:XXXX:XXXX:XXXX/XX Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1598 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1453 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:176137 (176.1 KB)  TX bytes:165179 (165.1 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:460 (460.0 B)  TX bytes:460 (460.0 B)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:169 errors:0 dropped:0 overruns:0 frame:0
          TX packets:183 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:14825 (14.8 KB)  TX bytes:15071 (15.0 KB)

$ netstat -anr

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.255.255.1    0.0.0.0         UG        0 0          0 eth0
10.8.0.0        10.8.0.2        255.255.255.0   UG        0 0          0 tun0
10.8.0.2        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.255.255.1    0.0.0.0         255.255.255.255 UH        0 0          0 eth0

$ip路由列表

default via 10.255.255.1 dev eth0
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1
10.255.255.1 dev eth0  scope link

附加信息:

如果您想知道我如何实现接口之间的流量重定向,这里是我的帖子,描述了我如何使用 iptables 管理到目前为止的一切:

使用 iptables 将辅助网络接口流量以及端口转发重定向到 tun0 (OpenVPN)

客户端网络块(如果点对点拓扑):

10.8.0.4 : Network address
10.8.0.5 : Virtual remote endpoint; Non pingable; Only used for routing
10.8.0.6 : Client IP address
10.8.0.7 : Network broadcast address

更新1:

我已将 VPN 服务器配置更改为VPN 客户端的相应文件中的topology subnet和 ,以便将 VPN 服务器和客户端带入子网,而不是然后添加路由。这次没有返回任何错误,但是仍然没有。但发生了变化(在 的情况下)。ifconfig-push 10.8.0.6 255.255.255.0ccd/24/32route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.8.0.6route add -net 192.168.1.0 netmask 255.255.255.0 dev tun0ping 192.168.1.102netstat -anrroute add -net 192.168.1.0 netmask 255.255.255.0 gw 10.8.0.6

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.255.255.1    0.0.0.0         UG        0 0          0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U         0 0          0 tun0
10.255.255.1    0.0.0.0         255.255.255.255 UH        0 0          0 eth0
192.168.1.0     10.8.0.6        255.255.255.0   UG        0 0          0 tun0

答案1

我阅读了以下说明:

https://openvpn.net/index.php/open-source/documentation/howto.html#scope

我已将其添加route 192.168.1.0 255.255.255.0server.conf我的 VPS 以及客户端的iroute 192.168.1.0 255.255.255.0相应文件中。ccd然后我使用了该命令route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.8.0.6,就是这样!我可以192.168.1.102从我的 VPS ping 我的 OpenVPN 客户端后面的客户端:D

PS:我还处于subnet topology模式中。我还没有在正常情况下尝试过p2p topology,但我认为它应该工作得很好。

答案2

澄清一下,这对我来说非常难以理解:

  • 在运行 OpenVPN 客户端软件的计算机上,OpenVPN 必须创建路由以响应route其配置文件中的(无“i”)指令。这是为了确保流量通过虚拟tunX设备路由并且 OpenVPN 能够识别它。如果 OpenVPN 充当其所连接的本地子网的路由器,则需要路由来“捕获”“作为网关发送给它”的传入流量,并将其提交给 OpenVPN 进行传递。(如果操作系统不通过该虚拟设备路由它,OpenVPN 将永远不会看到它。)
  • 如果目标地址不是 OpenVPN 已经知道的地址...它是一个远程子网,而不是两侧的本地地址...则iroute需要(使用“i”)告知 OpenVPN 该子网的存在,并且告诉它将流量发送到哪个远程。 (如果没有,您将在 OpenVPN 日志中看到它因此丢弃了数据包。)
  • 所有流量路由必须“与任何 TCP/IP 路由器一样”。每一个“跳跃”都必须做正确的事。 (traceroute是你的朋友。)此外,流量源自运行 OpenVPN 客户端的机器通常会被视为具有 OpenVPN 为此目的分配的 IP 地址,10.8.0.x因此该地址范围必须正确路由(到处...)以及。如果隧道已成功连接,但您无法通信,则“您遇到了 TCP/IP 路由问题”,就像任何其他类型的路由器设备一样。

我希望这些附加评论对您有用。

相关内容