通过 OpenVPN 客户端路由至 LAN 子网

通过 OpenVPN 客户端路由至 LAN 子网

我正在尝试路由到通过 OpenVPN 客户端连接的 LAN 子网。

我在使用该命令时遇到了问题route- 我无法理解它。 OpenVPN 链接已建立,我可以连接ping客户端。

当我尝试在 VPN 服务器上添加到 LAN 子网的路由时,出现以下错误:

# route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.9.0.6 dev tun0
SIOCADDRT: No such process

的路由表为OpenVPN服务器里面有10.9.0.0/24,所以我不确定问题是什么。

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ve108.csr2.lga1 0.0.0.0         UG    0      0        0 eth0
10.9.0.0        10.9.0.2        255.255.255.0   UG    0      0        0 tun0
10.9.0.2        *               255.255.255.255 UH    0      0        0 tun0
204.145.81.0    *               255.255.255.0   U     0      0        0 eth0

更多信息:

# ip ad sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0e:cf:20:c1:24 brd ff:ff:ff:ff:ff:ff
    inet 204.145.81.11/24 brd 204.145.81.255 scope global eth0
    inet6 fe80::20e:cfff:fe20:c124/64 scope link 
       valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.9.0.1 peer 10.9.0.2/32 scope global tun0

考虑到我可以访问ping我尝试路由到的 VPN 客户端,我不明白为什么会遇到这个问题。据我所知,我应该能够添加路线。

# ping -c 1 10.9.0.6
PING 10.9.0.6 (10.9.0.6) 56(84) bytes of data.
64 bytes from 10.9.0.6: icmp_req=1 ttl=64 time=24.0 ms

--- 10.9.0.6 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 24.008/24.008/24.008/0.000 ms

这是来自的详细信息OpenVPN 客户端,连接到 VPN 服务器。我尝试路由到的网络位于该客户端上。

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         greece-gw.secus 0.0.0.0         UG    2      0        0 eth0
10.9.0.1        10.9.0.5        255.255.255.255 UGH   0      0        0 tun0
10.9.0.5        *               255.255.255.255 UH    0      0        0 tun0
loopback        localhost       255.0.0.0       UG    0      0        0 lo
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
198.50.241.0    *               255.255.255.0   U     0      0        0 eth0

它可以很好地到达 VPN 服务器:

# ping -c 1 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=24.0 ms

--- 10.9.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 24.017/24.017/24.017/0.000 ms

它启用了 IP 转发:

# sysctl -a | grep forwarding
net.ipv4.conf.all.forwarding = 1

我已设置iptables允许转发:

# iptables -nvL FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  tun0   eth1    0.0.0.0/0            0.0.0.0/0

以下是客户端接口的配置:

# ip ad sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:5f:f2:1e brd ff:ff:ff:ff:ff:ff
    inet 198.50.241.113/24 brd 198.50.241.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5f:f21e/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:c6:b8:fd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fec6:b8fd/64 scope link 
       valid_lft forever preferred_lft forever
4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/sit 0.0.0.0 brd 0.0.0.0
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.9.0.6 peer 10.9.0.5/32 scope global tun0
       valid_lft forever preferred_lft forever

答案1

不幸的是,网络工具经常有可怕的错误消息。据我所知,内核不喜欢的是您尝试添加带有网关的路由,但它不认为该网关是“本地”的。你应该这样做:

route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.9.0.2 dev tun0

或者:

route add -net 192.168.0.0 netmask 255.255.255.0 dev tun0

除了配置内核路由之外,您还需要在 openvpn 本身内部添加路由。这是通过在客户端的 ccd 文件中使用“iroute”指令来完成的。

答案2

在进行另一次搜索时偶然发现了这个问题,看来OP正在尝试访问子网连接到远程 OpenVPN 服务器。

我的回复假设隧道模式,不桥接的模式。 (OpenVPN 充当路由器,不是一个转变.)

如果我的理解正确,那么--client-config-dir在这种情况下必须使用(“CCD”)。route主配置中必须有一个涵盖子网地址范围的指令,CCD 文件中的一个iroute(注意“i”)将被正确识别为属于偏僻的。 (您可以通过查看 OpenVPN 日志来查看它是否被识别,然后确认您的计算机上现在存在路由。)

如果您从另一个子网访问该子网(IE不是来自运行 OpenVPN 客户端的计算机,必须有是本地子网内的静态路由,它将流量“作为网关”发送到您的 OpenVPN 计算机。这可以在每台客户端计算机上定义,或者更方便地在本地路由器上定义。

流量的流动方式如下:

  • 您 ping 远程子网。
  • 您的机器或路由器将流量转发到作为网关的 OpenVPN 盒子。(因为从功能上来说,OpenVPN 隧道充当路由器。)
  • 该机器上的指令route会导致流量发送到tunX设备中,以便 OpenVPN 实际获取它。
  • iroute指令(以及它所在的 CCD)告诉 OpenVPN 存在远程子网,以及将其发送到哪个远程。(即使只有一个遥控器。)
  • 流量被路由到远程端的目的地。
  • 而现在,这一切必须反过来发生! 远程使用您在远程子网上的 IP 地址发送 ping 回复,并且它必须成功一路回来家。

如果您从直接连接到 OpenVPN 的计算机执行 ping 操作(它正在运行客户端),那么您的地址可能是10.8.0.x并且地址范围还必须在所有相关设备上成功路由,“往返”。

这些都是“基本的 TCP/IP 路由问题”,无论“相关路由器”是否是 OpenVPN,都会出现这种情况。一旦你让主持人成功地相互交谈(耶!),“对于网络来说,它们只是路由器。”

tcpdump(或 WireShark),traceroute是您最好的朋友。首先,您必须确保加密流量按照应在 OpenVPN 主机之间传输的方式进行传输。(当然,即使您无法阅读它们的内容,您也可以看到它们是否被路由。)然后,在隧道内做同样的事情。查看数据包是否被传送到隧道并通过隧道,并且它们一直到达那里后退。 (如果traceroute开始打印星号行,则可能意味着没有撤销在该特定“跃点”进行路由。包裹到达那里,但无法从那里回家。)

相关内容