我有一个 OpenVPN 服务器(10.1.0.0,255.255.255.0 VPN 子网)和一个本地子网为 192.168.1.0 255.255.255.0 的客户端。
服务器 VPN IP 为:10.1.0.1 客户端 VPN IP 为:10.1.0.2
服务器本地IP:172.16.0.1 客户端本地IP:192.168.1.236
我需要从客户端通过 VPN 访问本地服务器 IP 172.16.0.1,这样可以。但是我还需要能够从服务器访问客户端的 LAN,这样不行。
我可以从服务器 ping 192.168.1.236,但不能ping 其他设备。
这是我的 server.conf:
################################################# # OpenVPN 2.0 配置文件示例 # # 多客户端服务器。# # # # 此文件用于服务器端 # 多客户端单服务器的例子 #OpenVPN 配置。# # # # OpenVPN 还支持# # 单机 单机 # # 配置(参见示例页面 # # 请访问网站获取更多信息)。# # # # 此配置应适用于 Windows # # 或 Linux/BSD 系统。请记住 # # Windows 引用路径名并使用# # 双反斜杠,例如:# # “C:\\Program Files\\OpenVPN\\config\\foo.key” # # # # 注释以 '#' 或 ';' 开头 # ################################################# # OpenVPN 应该使用哪个本地 IP 地址 # 继续听吗?(可选) ;本地 abcd # OpenVPN 应该监听哪个 TCP/UDP 端口? # 如果你想运行多个 OpenVPN 实例 # 在同一台机器上,使用不同的端口 # 号。您需要 # 在防火墙上打开此端口。 端口 1194 拓扑子网 # TCP 还是 UDP 服务器? 协议 TCP ;原始 UDP #“dev tun”将创建一个路由 IP 隧道, #“dev tap”将创建一个以太网隧道。 # 如果你正在使用以太网桥接,请使用“dev tap0” # 并预先创建了 tap0 虚拟接口 # 并将其与您的以太网接口桥接。 # 如果你想控制访问策略 # 通过 VPN,您必须创建防火墙 #TUN/TAP 接口的规则。 # 在非 Windows 系统上,你可以 # 一个明确的单元编号,例如 tun0。 # 在 Windows 上,使用“dev-node”。 # 在大多数系统上,VPN 将无法运行 # 除非你部分或全部禁用 # TUN/TAP 接口的防火墙。 ;开发点击 开发调谐 # Windows 需要 TAP-Win32 适配器名称 # 如果您在网络连接面板中 # 有多个。在 XP SP2 或更高版本上, # 您可能需要选择性地禁用 # TAP 适配器的 Windows 防火墙。 # 非 Windows 系统通常不需要这个。 ;开发节点 MyTap # SSL/TLS 根证书 (ca)、证书 # (cert) 和私钥 (key)。每个客户端 # 并且服务器必须有自己的证书和 # 密钥文件。服务器和所有客户端将 # 使用相同的 ca 文件。 # # 请参阅“easy-rsa”目录以了解一系列 用于生成 RSA 证书的脚本数量 # 和私钥。请记住使用 # 服务器的唯一通用名称 # 以及每个客户端证书。 # # 可以使用任何 X509 密钥管理系统。 # OpenVPN 也可以使用 PKCS #12 格式的密钥文件 #(参见手册页中的“pkcs12”指令)。 ca 证书 证书服务器.crt 密钥服务器.key # 此文件应保密 # Diffie-Hellman 参数。 # 使用以下方式生成你自己的: # openssl dhparam -out dh1024.pem 1024 # 如果你使用 #2048 位密钥。 dh dh2048.pem # 配置服务器模式并提供 VPN 子网 # 用于 OpenVPN 从中提取客户端地址。 # 服务器将自行使用 10.8.0.1, # 其余部分将提供给客户。 # 每个客户端都能够访问服务器 # on 10.8.0.1. 如果你是 # 以太网桥接。请参阅手册页以了解更多信息。 服务器 10.1.0.0 255.255.255.0 # 维护客户端虚拟IP地址的记录 # 此文件中的关联。如果 OpenVPN 发生故障或 # 重新启动后,可以分配重新连接的客户端 # 与池中的虚拟 IP 地址相同 # 先前已分配。 ifconfig-pool-persist ipp.txt # 配置以太网桥接的服务器模式。 # 您必须首先使用操作系统的桥接功能 # 将 TAP 接口与以太网桥接起来 # NIC 接口。然后您必须手动设置 # 桥接接口上的 IP/网络掩码,这里我们 # 假设 10.8.0.4/255.255.255.0。最后我们 # 必须在此子网中留出一个 IP 范围 # (start=10.8.0.50 end=10.8.0.100) 分配 # 连接客户端。保留此行注释 # 除非您正在进行以太网桥接。 ;服务器桥 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 # 配置以太网桥接的服务器模式 # 使用 DHCP 代理,客户端可以对话 # 到 OpenVPN 服务器端 DHCP 服务器 # 接收其 IP 地址分配 # 和 DNS 服务器地址。您必须先使用 # 你的操作系统的桥接能力来桥接 TAP # 与以太网 NIC 接口连接。 # 注意:此模式仅适用于客户端(例如 # Windows),其中客户端 TAP 适配器 #绑定到 DHCP 客户端。 ;服务器桥 # 将路由推送到客户端以允许它 # 到达后面的其他私有子网 # 服务器。请记住,这些 # 私有子网也需要 # 了解如何路由 OpenVPN 客户端 #地址池(10.8.0.0/255.255.255.0) # 返回 OpenVPN 服务器。 推“路由 192.168.1.0 255.255.255.0” 推“路由 10.1.0.0 255.255.255.255.0” # 将特定 IP 地址分配给特定 # 客户端或者连接的客户端有私有 # 其后面的子网也应该具有 VPN 访问权限, # 使用子目录“ccd”来指定客户端 # 配置文件(有关更多信息,请参阅手册页)。 # 示例:假设客户端 # 证书通用名称为“Thelonious” # 其连接后面还有一个小子网 #机器,例如192.168.40.128/255.255.255.248。 # 首先,取消注释以下几行: 客户端配置目录 ccd 路由 192.168.1.0 255.255.255.0 # 然后创建一个文件 ccd/Thelonious,其中包含以下行: # iroute 192.168.40.128 255.255.255.248 # 这将允许 Thelonious 的私有子网 # 访问 VPN。此示例仅适用于 # 如果你正在路由,而不是桥接,即你是 # 使用“dev tun”和“server”指令。 # 例子:假设你想给 # Thelonious 的固定 VPN IP 地址为 10.9.0.1。 # 首先取消注释以下几行: ;客户端配置目录 ccd ;路由 10.8.0.0 255.255.255.252 # 然后将这一行添加到 ccd/Thelonious: # ifconfig-push 10.9.0.1 10.9.0.2 # 假设你想启用不同的 # 不同群体的防火墙访问策略 客户端数量。有两种方法: # (1) 运行多个 OpenVPN 守护进程,每个进程一个 # 组,以及防火墙 TUN/TAP 接口 # 为每个组/守护进程适当地设置。 # (2) (高级)创建一个脚本来动态 #修改防火墙以响应访问 # 来自不同的客户端。请参阅 man # 页面以获取有关 learn-address 脚本的更多信息。 ;学习地址./脚本 # 如果启用,该指令将配置 # 所有客户端重定向其默认 # 网络网关通过 VPN,导致 # 所有 IP 流量,例如网页浏览和 # 和 DNS 查找通过 VPN #(OpenVPN 服务器可能需要 NAT # 或者将 TUN/TAP 接口桥接到互联网 # 为了使其正常工作)。 ;推“重定向网关def1旁路-dhcp” # 某些 Windows 特定的网络设置 # 可以推送到客户端,例如 DNS # 或 WINS 服务器地址。警告: # http://openvpn.net/faq.html#dhcpcaveats # 以下地址均指公众 # 由 opendns.com 提供的 DNS 服务器。 ;推“dhcp选项DNS 208.67.222.222” ;推“dhcp选项DNS 208.67.220.220” # 取消注释此指令以允许不同的 # 客户端能够“看到”彼此。 # 默认情况下,客户端只能看到服务器。 # 要强制客户端只能看到服务器,你 # 还需要适当的防火墙 #服务器的TUN/TAP接口。 ;客户端到客户端 # 如果有多个客户端,请取消注释此指令 # 可能使用相同的证书/密钥连接 # 个文件或通用名称。建议 # 仅用于测试目的。对于生产用途, # 每个客户端都应该有自己的证书/密钥 # 一对。 # # 如果你还没有生成个人 # 每个客户端的证书/密钥对, # 每个都有自己独特的“通用名称”, # 取消注释此行。 ;重复-cn # keepalive 指令会导致类似 ping 的情况 # 要来回发送的消息 # 链接,以便双方知道何时 # 另一侧已经倒下。 # 每 10 秒 ping 一次,假设远程 # 如果在以下情况下未收到 ping 则表示对等端已关闭 # 120 秒的时间段。 保持活动 10 120 # 提供额外的安全保障 # 通过 SSL/TLS,创建“HMAC 防火墙” # 帮助阻止 DoS 攻击和 UDP 端口泛洪。 # # 生成: # openvpn --genkey --secret ta.key # # 服务器和每个客户端必须有 # 该密钥的副本。 # 第二个参数应为“0” 服务器上为 #,客户端上为‘1’。 ;tls-auth ta.key 0 # 此文件是秘密的 tls-密码“DEFAULT:@SECLEVEL = 0” # 选择一个加密密码。 # 此配置项必须复制到 # 客户端配置文件也是如此。 ;密码 BF-CBC # Blowfish (默认) ;密码 AES-128-CBC # AES ;密码 DES-EDE3-CBC # 三重 DES # 在VPN链路上启用压缩。 # 如果您在这里启用它,您还必须 # 在客户端配置文件中启用它。 ;comp-lzo # 最大并发连接数 # 我们想要允许的客户端。 ;最大客户端数 250 # 减少 OpenVPN 是一个好主意 # 初始化后的守护进程的权限。 # # 你可以取消注释 # 非 Windows 系统。 ;用户无人 ;群组无人 # 持久选项将尝试避免 # 重启时访问某些资源 # 可能无法再访问,因为 权限降级的次数。 持久密钥 坚持-tun # 输出一个简短的状态文件,显示 # 当前连接数,已截断 # 并且每分钟重写一次。 状态 openvpn-status.log # 默认情况下,日志消息将发送到系统日志(或 # 在 Windows 上,如果作为服务运行,它们将转到 #“\Program Files\OpenVPN\log”目录)。 # 使用 log 或 log-append 来覆盖此默认值。 # “log” 将在 OpenVPN 启动时截断日志文件, # 而“log-append”将附加到它。使用一个 # 或其他(但不能同时)。 ;记录 openvpn.log ;日志附加 openvpn.log #设置适当的日志级别 # 文件详细程度。 # # 0 是静默的,除非发生致命错误 # 4 对于一般用途来说是合理的 # 5 和 6 可以帮助调试连接问题 # 9 非常冗长 动词 4 # 静音重复消息。最多 20 # 同一条消息的连续消息 #类别将被输出到日志中。 ;静音 20
这是我的 ccd/Prezentace 文件:
iroute 192.168.1.0 255.255.255.0 推“路由 172.16.0.0 255.255.255.0”
这是我的 client.conf:
############################################## # 客户端 OpenVPN 2.0 配置文件示例 # # 用于连接到多客户端服务器。# # # # 此配置可供多个 # # 个客户端,但是每个客户端都应该有 # # 它自己的证书和密钥文件。# # # # 在 Windows 上,你可能需要重命名这个# # 文件,因此它具有 .ovpn 扩展名 # ############################################## # 指定我们是客户,并且我们 # 将提取某些配置文件指令 # 来自服务器。 客户 # 使用与上相同的设置 # 服务器。 # 在大多数系统上,VPN 将无法运行 # 除非你部分或全部禁用 # TUN/TAP 接口的防火墙。 ;开发点击 开发调谐 # Windows 需要 TAP-Win32 适配器名称 # 来自网络连接面板 # 如果您有多个。在 XP SP2 上, # 您可能需要禁用防火墙 # 表示 TAP 适配器。 ;开发节点 MyTap # 我们是否连接到 TCP 或 # UDP 服务器?使用与 # 在服务器上。 协议 TCP #proto udp # 服务器的主机名/IP 和端口。 # 你可以有多个远程条目 # 在服务器之间实现负载平衡。 故意隐藏的遥控器 1194 # 从远程选择一个随机主机 # 负载平衡列表。否则 # 按指定的顺序尝试主机。 ;远程随机 # 继续无限期地尝试解决 # OpenVPN 服务器的主机名。非常有用 # 在非永久连接的机器上 # 连接到互联网,例如笔记本电脑。 解析-重试无限 # 大多数客户端不需要绑定到 # 特定的本地端口号。 不绑定 # 初始化后降级权限(仅限非 Windows) ;用户无人 ;群组无人 # 尝试在重启后保留一些状态。 持久密钥 坚持-tun # 如果您通过 # HTTP 代理到达实际的 OpenVPN # 服务器,输入代理服务器/IP 和 # 此处为端口号。请参阅手册页 # 如果你的代理服务器需要 # 验证。 ;http-proxy-retry # 连接失败时重试 ;http-proxy [代理服务器] [代理端口号] # 无线网络通常会产生大量 重复数据包的数量。设置此标志 # 消除重复数据包警告。 ;静音重播警告 #SSL/TLS 参数。 # 更多信息请查看服务器配置文件 # 描述。最好使用 # 单独的 .crt/.key 文件对 # 为每个客户端。单个 ca # 文件可用于所有客户端。 ca ca-测试.crt 证书Prezentace.crt 密钥 Prezenace.key # 通过检查来验证服务器证书 # 该证书具有 nsCertType # 字段设置为“服务器”。这是一个 # 重要的预防措施 # 这里讨论的潜在攻击: # http://openvpn.net/howto.html#mitm # # 要使用此功能,您需要生成 # 您的服务器证书与 nsCertType # 字段设置为“服务器”。build-key-server easy-rsa 文件夹中的 # 脚本将执行此操作。 --remote-cert-tls 服务器 # 如果服务器上使用了 tls-auth 密钥 # 那么每个客户端也必须拥有该密钥。 ;tls-auth ta.key 1 tls-密码“DEFAULT:@SECLEVEL = 1” # 选择一个加密密码。 # 如果服务器上使用了密码选项 # 那么您也必须在这里指定它。 ;密码 BF-CBC # 在VPN链路上启用压缩。 # 不要启用此功能,除非它也是 # 在服务器配置文件中启用。 ;comp-lzo # 设置日志文件详细程度。 动词 3 # 静音重复消息 ;静音 20 #auth-用户密码
非常感谢任何提示。客户端计算机 (Linux) 上的转发功能也已启用。
服务器的路由表:
内核 IP 路由表 目标网关 Genmask 标志 指标参考使用 Iface 0.0.0.0 隐藏 0.0.0.0 UG 0 0 0 enp1s0 10.1.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 虚拟 192.168.1.0 10.1.0.2 255.255.255.0 UG 0 0 0 tun0 212.158.144.64 0.0.0.0 255.255.255.240 U 0 0 0 enp1s0
客户端的路由表:
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 10.1.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 172.16.0.0 10.1.0.1 255.255.255.0 UG 0 0 0 tun0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
答案1
网络中必须有双向有效路由。数据包带有源和目标。
默认情况下,客户端上的主机只有一条默认路由,匹配 0.0.0.0/0,因此所有不是发往本地网段的数据包都会发送到这个 IP。
在您的设置中,您有多个路由器 - 一个用于连接 VPN 网络,另一个可能为默认网关。客户端本地网络中的所有计算机都需要配置一条路由以通过172.16.0.0/16
连接192.168.1.236
。