AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 531856
Accepted
Marko Todoric
Marko Todoric
Asked: 2019-07-25 03:40:11 +0800 CST2019-07-25 03:40:11 +0800 CST 2019-07-25 03:40:11 +0800 CST

允许网络中的客户端与通过 OpenVPN 连接的客户端进行通信

  • 772

网络拓扑是这样的:

OpenVPN 服务器:

Private IP (eth0): 10.0.4.23/16
Public IP (eth1): 77.20.30.40/24
Routes:
default via 77.20.30.1
10.0.0.0/16 (not routable, so no gateway)
10.8.0.0/16 via 10.0.0.65

在同一个私有子网上,我们为通过 OpenVPN 连接的客户端提供了 10.0.13.0/24 网络范围内的专用地址。因此客户端将 OpenVPN 服务器地址视为 10.0.13.1 作为网关。

客户端机器:

Public IP: 217.40.50.60

目前,当客户端连接到 VPN 服务器时,它无法看到私有范围内的子网。因此,我使用 OpenVPN 服务器 tun0 IP (10.0.13.1) 添加了到这些网络的路由

ip r add 10.0.0.0/16 via 10.0.13.1
ip r add 10.8.0.0/16 via 10.0.13.1

它不起作用。所以我在 OpenVPN 服务器上添加了 POSTROUTING iptables 规则

iptables -A POSTROUTING -s 10.0.13.0/24 -o eth0 -j MASQUERADE

那时它奏效了。但是,问题是,例如,当我连接到该私有子网中的服务器时10.0.4.20,该服务器会将原始 IP 地址视为 OpenVPN 私有地址10.0.4.23。

目前我们已经建立了 Microsoft VPN,当我们使用它时,所有服务器都可以看到由 VPN 分配的客户端 IP 地址,因此可以完成(也许)但我不确定我哪里弄错了。

这是 OpenVPN Server 配置文件,为了方便读者,去掉了注释。

port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.0.13.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.0.0.1"
push "dhcp-option DNS 10.0.0.2"
push "route 10.0.0.0 255.255.0.0"
push "route 10.8.0.0 255.255.0.0"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key 0
crl-verify crl.pem
ca ca.crt
cert server_oy94rAaIiMtrnvAB.crt
key server_oy94rAaIiMtrnvAB.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
status /var/log/openvpn/status.log
log /var/log/openvpn/openvpn.log
verb 3

plugin /opt/openvpn-ldap-auth/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
client-cert-not-required

我尝试设置server 10.0.13.0 255.255.255.0为server 10.0.13.0 255.255.0.0应该是网络,但 OpenVPN 服务器不喜欢该配置,并且如果子网中的第一个八位字节不是,则不想启动0。

所以为了简单起见:我如何制作一些位于 10.0.0.0/16 网络上的服务器,访问位于 10.0.13.0/24 上的 VPN 客户端。或者更好的是,我如何让 OpenVPN 服务器分配给 10.0.13.0/24 范围内的客户端 IP 地址,但实际上让它们属于 10.0.0.0/16?我可能需要在同一台服务器上安装单独的 DHCP 服务器吗?

openvpn
  • 2 2 个回答
  • 1588 Views

2 个回答

  • Voted
  1. Best Answer
    Marko Todoric
    2019-07-25T07:34:23+08:002019-07-25T07:34:23+08:00

    在Ethernet Bridging的帮助下,我设法解决了这个问题。

    这些将是步骤:

    • 在 CentOS 上停止 OpenVPN 服务器:systemctl stop openvpn@server
    • 在 CentOS 7 上安装 bridge-utils 软件包yum install bridge-utils
    • 创建 tap0 虚拟以太网设备openvpn --mktun --dev tap0
    • 创建桥梁brctl addbr br0
    • 将 eth0 设备(具有私有 IP 的设备)添加到新网桥brctl addif br0 eth0
    • 将 tap0 设备添加到桥接brctl addif br0 tap0
    • 为 tap0 设备启用混杂模式ifconfig tap0 0.0.0.0 promisc up
    • 为 eth0 设备启用混杂模式ifconfig eth0 0.0.0.0 promisc up
    • 将之前设置为 eth0 的 IP 地址分配给 br0ifconfig br0 10.0.4.23 netmask 255.255.0.0 broadcast 10.0.255.255
    • 添加 iptables 规则,以便新接口可以接受流量
        iptables -A INPUT -i tap0 -j ACCEPT
        iptables -A INPUT -i br0 -j ACCEPT
        iptables -A FORWARD -i br0 -j ACCEPT
    
    • 打开 VPN Server 配置文件,例如/etc/openvpn/server/server.conf,注释掉dev tun并在其下方或上方添加dev tap0右侧。
    • 注释掉以 开头的整行server并添加最初在 eth0 和现在在 br0 上的 IP 地址,还添加 VPN 将分配给客户端的地址的 DHCP 范围,如下所示:
    bridge 10.0.4.23 255.255.0.0 10.0.13.2 10.0.13.254
    

    这将允许服务器将地址从 10.0.13.2 - 10.0.13.254 租给客户端。

    • 现在启动 openvpn 服务器并享受 :) systemctl start openvpn@servers。
    • 0
  2. LL3
    2019-07-25T12:31:05+08:002019-07-25T12:31:05+08:00

    从您的描述中,我看到一个缺失的配置:您没有告诉其他服务器如何访问 VPN 客户端。

    缺少该配置,任何具有10.0/16网络地址的主机将默认假定同一网络的任何其他地址,因此包括10.0.13/24子网络,是“on-link”,即无需干预路由器即可直接访问。

    作为一个示例测试,尝试使用属于网络ip r add 10.0.13.0/24 via 10.0.4.23的任何其他Linux 服务器(不是 OpenVPN 服务器)10.0/16:之后,流量应该在该特定 Linux 服务器和 OpenVPN 客户端之间定期流动。

    当然,这同样适用于您的10.0/16专用网络上的所有主机,无论是 Linux、Windows、Mac 还是 Cisco 等等。在实践中,您应该将该路由放在您专用网络的所有主机上。

    当然,如果您有很多主机,这可能是不可取的。更好的方法(网络方面)是让您的 OpenVPN 服务器为您的整个私有网络托管一种中央网关,可能实际上是所有这些主机的默认网关。

    假设这是不可行的,如果您的私有网络中已经有这样一个“中央网关”(可能是您的10.0.0.65主机?),那么您可以尝试使用上面的路由配置那个:其他主机(指的是那个网关)通常应该服从和遵守。然而,这种解决方案通常不是最理想的,因为它使这些主机经常被“中央网关”重新路由到 OpenVPN 服务器网关。

    其他替代方案包括在充当 OpenVPN 服务器的 Linux 服务器上设置特殊配置,以使其也充当 OpenVPN 客户端地址的一种“代理 arp”。可能,但复杂而先进。

    桥接解决方案无疑是一种快速简便的解决方案,但意味着所有广播流量(在中等规模的 LAN 中可能是闲聊的)都会传播到您的所有 OpenVPN 客户端,从而占用您的 OpenVPN 服务器的资源和您的 Internet 连接到和来自您的客户端,每个广播帧乘以连接的客户端数量。

    • 0

相关问题

  • OpenVPN 端口范围是多少?

  • 通过 VPN 路由更多流量

  • OpenVPN TLS 握手在 P_CONTROL_HARD_RESET_SERVER_V2 挂起(未收到)

  • 如何将 tc qdisc 命令与特定接口永久关联?

  • 哪些vpn服务不需要Win/Android/iOS客户端软件就可以实现?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve