我正在尝试路由到通过 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
开始打印星号行,则可能意味着没有撤销在该特定“跃点”进行路由。包裹到达那里,但无法从那里回家。)