无法访问 OpenVPN 节点,但可以访问其他主机

无法访问 OpenVPN 节点,但可以访问其他主机

我现在真的很困惑……不,这对我来说不是正常状态 ;-) 我的问题:我有一个设置,它运行了一个月,让我可以连接到网络,这样我就可以从其他网络访问每台机器。现在,上周末,必须用较新的硬件(zyxel NAS 540)替换当前的客户端硬件(设备,称为 pogoplug,但使用 debian 安装进行了修改)。到目前为止,NAS 目前拥有自己的固件,目前无法使用 debian 或其他发行版进行修改,因为内核是用 64k 页面大小编译的,这破坏了 ARM arch 的许多可用二进制文件的兼容性。但一些社区用户使用所需的编译设置提供了 openvpn。

网络设置

网络A

在网络 A 上,我运行 LXC (vmm-h01)。我创建了一个容器 (app-h01),其中运行着 openVPN 服务器 (IP:192.168.200.204)。主机和容器之间的设置通过 veth 接口桥接,容器 IP 与其他 IP 位于同一网络中。这是必要的,因为在一个容器内我有一个服务广播/多播内容,因此它必须位于同一网络中。网络 A 是一个 192.168.200.0/24 网络。

在路由器(192.168.200.254)上设置了以下规则:网络子网掩码网关
192.168.201.0 255.255.255.0 192.168.200.204 192.168.254.0 255.255.255.0 192.168.200.204

网络 B

在网络 B 上,openVPN 客户端(IP:192.168.201.200)直接在 NAS 上运行,无需任何容器或虚拟化。网络 A 是 192.168.201.0/24 网络。

在路由器(192.168.201.254)上设置以下规则:

Network     Subnetmask  Gateway         
192.168.200.0   255.255.255.0   192.168.201.200 
192.168.254.0   255.255.255.0   192.168.201.200

这个问题让我困惑

我在 nas 上安装了 openvpn,将旧设置复制到它并启动 openvpn。连接已直接建立,一切看起来都很好。我从网络 A ping 网络 B 上的主机,成功了!从网络 B ping 网络 A 上的主机,成功了!接下来我想 ssh 到网络 B 上正在运行 openVPN 客户端的主机...失败!我可以 ping 主机,但无法 ssh 到它。所以我 ssh 到网络 B 上的网络内主机,然后从那里 ssh 到具有 openVPN 客户端的主机,它成功了...当我从网络 B 尝试到 A 时,行为是相同的(=相反)...

分析问题

为了分析哪里出了问题,我从网络 A 内的主机跟踪路径:... 到网络 B 内的主机

leonard:~ # tracepath 192.168.201.254
 1?: [LOCALHOST]                                         pmtu 8996
 1:  vmm-h01.fritz.box                                     0.776ms pmtu 1500
 1:  app-v01.fritz.box                                     0.577ms
 2:  192.168.254.2                                        22.156ms
 3:  192.168.201.254                                      26.285ms reached
     Resume: pmtu 1500 hops 3 back 62

... 到网络 B 上装有 openVPN Client 的主机

leonard:~ # tracepath 192.168.201.200
 1?: [LOCALHOST]                                         pmtu 8996
 1:  vmm-h01.fritz.box                                     0.753ms pmtu 1500
 1:  app-v01.fritz.box                                     0.594ms
 2:  192.168.201.200                                      20.341ms reached
     Resume: pmtu 1500 hops 2 back 63

现在,到主机 app-v01.fritz.box 的路径已经正常。这里有一个区别:在第一个跟踪路径上,包通过 192.168.254.2“跳跃”,在第二个跟踪路径上,它直接跳到 192.168.201.200。我目前不知道哪里出了问题。我可以理解,什么都行不通,如果我只能直接访问 openVPN 实例上的服务(因为路由错误或缺失),我可以理解,但我不明白,为什么除了访问 openVPN 实例上的服务外,其他一切都正常。

我也在 vmm-h01 上直接尝试使用 openVPN,排除由于 LXC 设置而导致的奇怪的路由/桥接行为,但结果是一样的......

目前没有活动的 iptables 或类似的东西,hosts.deny 为空...

OpenVPN 服务器版本

OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Dec  1 2014
library versions: OpenSSL 1.0.1k 8 Jan 2015, LZO 2.08
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <[email protected]>
Compile time defines: enable_crypto=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_maintainer_mode=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=yes enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_ifconfig_path=/sbin/ifconfig with_iproute_path=/sbin/ip with_mem_check=no with_plugindir='${prefix}/lib/openvpn' with_route_path=/sbin/route with_sysroot=no
git revision: refs/heads/jessie/b35ad09bfc4a26e7

服务器配置文件

daemon
port 8070
dev tun
proto tcp-server
ifconfig 192.168.254.1 192.168.254.2
secret /etc/openvpn/static.key
script-security 2
up /etc/openvpn/server.up
down /etc/openvpn/server.down
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
user nobody
group nogroup
verb 3

服务器启动

#!/bin/bash
sysctl -w net/ipv4/conf/eth0/proxy_arp=1
sysctl -w net/ipv4/ip_forward=1
route add -net 192.168.254.0/24 dev tun0
route add -net 192.168.201.0/24 dev tun0
exit 0

服务器关闭

#!/bin/bash
route del -net 192.168.201.0/24 dev tun0
route del -net 192.168.254.0/24 dev tun0
exit 0

路由表 OpenVPN 服务器

Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
default         192.168.200.254 0.0.0.0         UG    0      0        0 eth0
192.168.200.0   *               255.255.255.0   U     0      0        0 eth0
192.168.201.0   *               255.255.255.0   U     0      0        0 tun0
192.168.254.0   *               255.255.255.0   U     0      0        0 tun0
192.168.254.2   *               255.255.255.255 UH    0      0        0 tun0

OpenVPN 客户端版本

OpenVPN 2.3.6 armv7l-unknown-linux-gnueabi [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Apr  1 2015
library versions: OpenSSL 1.0.1j 15 Oct 2014, LZO 2.09
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <[email protected]>
Compile time defines: enable_crypto='yes' enable_crypto_ofb_cfb='yes' enable_debug='yes' enable_def_auth='yes' enable_dlopen='unknown' enable_dlopen_self='unknown' enable_dlopen_self_static='unknown' enable_fast_install='yes' enable_fragment='yes' enable_http_proxy='yes' enable_iproute2='no' enable_libtool_lock='yes' enable_lzo='yes' enable_lzo_stub='no' enable_management='yes' enable_multi='yes' enable_multihome='yes' enable_pam_dlopen='no' enable_password_save='no' enable_pedantic='no' enable_pf='yes' enable_pkcs11='no' enable_plugin_auth_pam='yes' enable_plugin_down_root='yes' enable_plugins='yes' enable_port_share='yes' enable_selinux='no' enable_server='yes' enable_shared='yes' enable_shared_with_static_runtimes='no' enable_small='no' enable_socks='yes' enable_ssl='yes' enable_static='yes' enable_strict='no' enable_strict_options='no' enable_systemd='no' enable_win32_dll='yes' enable_x509_alt_username='no' with_crypto_library='openssl' with_gnu_ld='yes' with_mem_check='no' with_plugindir='$(libdir)/openvpn/plugins' with_sysroot='no'

客户端配置文件

remote <...>
dev tun
proto tcp-client
ifconfig 192.168.254.2 192.168.254.1
secret /etc/openvpn/static.key
script-security 2
up /etc/openvpn/client.up
down /etc/openvpn/client.down
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
comp-lzo                                                                                                                                                                                        
keepalive 10 60                                                                                                                                                                                 
ping-timer-rem                                                                                                                                                                                  
persist-tun                                                                                                                                                                                     
persist-key                                                                                                                                                                                     
user nobody                                                                                                                                                                                     
group nogroup                                                                                                                                                                                   
verb 2

客户端

#!/opt/bin/bash
openvpn --mktun --dev tun0
echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
route add -net 192.168.254.0/24 dev tun0
route add -net 192.168.200.0/24 dev tun0
exit 0

客户端关闭

#!/opt/bin/bash
route del -net 192.168.200.0/24 dev tun0
route del -net 192.168.254.0/24 dev tun0
exit 0

路由表 OpenVPN 客户端

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         fritz.box       0.0.0.0         UG    5      0        0 egiga0
192.168.200.0   192.168.254.2   255.255.255.0   UG    0      0        0 tun0
192.168.201.0   *               255.255.255.0   U     0      0        0 egiga0
192.168.254.0   *               255.255.255.0   U     0      0        0 tun0
192.168.254.1   *               255.255.255.255 UH    0      0        0 tun0

相关内容