无法 ping 另一台计算机接口上的第二个 IP 地址

无法 ping 另一台计算机接口上的第二个 IP 地址

我有一个连接到 OpenVPN 服务器的 OpenVPN 客户端。

服务器有以下路由:

default via 10.109.185.65 dev eth0 proto dhcp src 10.109.185.84 metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
10.109.185.64/27 dev eth0 proto kernel scope link src 10.109.185.84
10.109.185.65 dev eth0 proto dhcp scope link src 10.109.185.84 metric 100

tun0客户端在OpenVPN 创建的虚拟接口上具有以下地址:

11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
    inet 10.8.0.3/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::3c55:91d1:e8cf:7c55/64 scope link flags 800
      valid_lft forever preferred_lft forever

从服务器上,我可以通过执行 ping 操作来 ping 客户端,ping 10.8.0.3并且工作正常。

tun0然后我通过执行以下操作在客户端上添加了第二个 IP 地址ip addr add 10.100.1.2/24 dev tun0。在界面上显示tun0为:

inet 10.100.1.2/24 scope global tun0
   valid_lft forever preferred_lft forever

在服务器上,我通过执行以下操作添加了该子网的路由ip route add 10.100.1.0/24 dev tun0。它在路由列表中显示为:

10.100.1.0/24 dev tun0 scope link

ping 10.100.1.2但在服务器上尝试失败。

然后我注意到服务器和客户端都有以下 iptables FORWARD 规则:

ACCEPT     all  --  10.8.0.0/24          anywhere

iptables -A FORWARD -s 10.100.1.0/24因此,我通过在服务器和客户端上执行此操作,为 10.100.1.0 子网添加了另一个 FORWARD 规则。

ping 10.100.1.2但在服务器上尝试仍然失败。

为了能够从服务器 ping 通 10.100.1.2,我还需要做什么吗?

答案1

需要考虑三件事:

1. 路由

第二个 IP 范围 ( 10.100.1.0/24) 将直接附加到tun0接口。因此,您的机器将知道如何访问10.100.1.0/24网络,而无需注入任何静态路由语句。添加第二个IP后不久,执行以下命令,您将看到路由已动态添加到表中。

$ sudo ip route show

2. 点对点网络

tun0创建 VPN 隧道时,您可以使用VPN 服务器和客户端之间的虚拟网络适配器(在本例中)创建点对点网络。向此接口分配第二个或第三个或更多 IP 地址会使点对点变得复杂。

3、解决方案

创建一个新的虚拟网络适配器,您将为其分配所选的第二个 IP 地址。除非需要,否则不需要路由声明。此外,不需要进一步的iptables规则。 (您必须删除之前创建的静态路由,并删除附加的 iptables 规则。您不需要任何这些来使您的东西正常工作)

从 VPN 服务器:

$ lsmod | grep dummy

上面的命令检查内核中是否加载了“虚拟”网络驱动程序(模块)。如果没有加载,请检查文档这里

$ sudo ip link add tun99 type dummy
$ sudo ip link set dev tun99 up

上面的命令将创建一个名为的新虚拟网络适配器tun99

$ sudo ip address change dev tun99 10.100.1.1

10.100.1.1/32上面的命令将为新创建的网络适配器 分配一个 IP 地址tun99

由于它是点对点网络,因此不需要路由声明

从 VPN 客户端:

$ sudo ip link add tun99 type dummy
$ sudo ip link set dev tun99 up
$ sudo ip address change dev tun99 10.100.1.2

通过从 VPN 客户端向 VPN 服务器的 IP 发送 ping 请求来测试连接 10.100.1.1

$ ping 10.100.1.1

答案2

 iptables -A FORWARD -s 10.100.1.0/24

如果此命令不包含-j ACCEPT,您所做的就是添加一个流量计数器来测量与 10.100.1.0/24 网络匹配的到达规则集中该点的数据包+字节数。如果您指定一个没有任何操作的规则,它将只是坐在那里,计算与该规则匹配的数据包,而不执行任何其他操作。

另外,-A选项追加将新规则添加到表中现有规则集的末尾;规则按顺序处理,如果表的最后一条规则有“拒绝所有”规则(这是通常推荐的做法),则其后的任何规则都不会产生任何影响。如果是这样,您应该将新规则插入到更合适的位置。

相关内容