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
    • 最新
    • 标签
主页 / server / 问题 / 1171702
Accepted
Dmitriano
Dmitriano
Asked: 2025-01-27 07:07:19 +0800 CST2025-01-27 07:07:19 +0800 CST 2025-01-27 07:07:19 +0800 CST

OpenVPN 客户端无需客户端到客户端选项即可互相看到

  • 772

我在 Docker 容器中运行一个实验性的 VPN 服务器。

我的docker-compose.yml文件:

version: '3'
services:
dockovpn:
    image: alekslitvinenk/openvpn
    cap_add:
        - NET_ADMIN
    ports:
        - 1194:1194/udp # Expose tcp if you defined HOST_TUN_PROTOCOL=tcp
    environment:
        HOST_ADDR: ${HOST_ADDR}
    volumes:
        - /var/lib/dockovpn:/opt/Dockovpn_data
    restart: always

HOST_ADDR我的 IP 地址在哪里?

我使用

sudo docker-compose up -d

命令,我可以从 Windows、Android 和 iOS 设备连接到 VPN。

没有client-to-client选项server.conf:

sudo docker exec -it dockovpn_dockovpn_1 bash
cd /opt/Dockovpn
cat config/server.conf

port 1194
proto %HOST_TUN_PROTOCOL%
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/MyReq.crt
key /etc/openvpn/MyReq.key
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
duplicate-cn
keepalive 10 120
cipher AES-256-GCM
ncp-ciphers AES-256-GCM:AES-256-CBC
auth SHA512
persist-key
persist-tun
status openvpn-status.log
verb 4
tls-server
tls-version-min 1.2
tls-auth /etc/openvpn/ta.key 0
crl-verify /etc/openvpn/crl.pem

因此,根据OpenVPN 文档,客户端不应该互相看到对方,但实际上他们可以看到对方。例如,我可以通过远程桌面连接到 IP 地址为 10.8.0.14 等的远程 Windows 计算机...

如何解决这个问题?

编辑1

在scripts\start.sh中找到以下内容:

# Allow traffic on the TUN interface.
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT

也许我最好删除iptables -A FORWARD -i tun0 -j ACCEPT而不是添加iptables -A FORWARD -i tun0 -o tun0 -j REJECT?

openvpn
  • 1 1 个回答
  • 94 Views

1 个回答

  • Voted
  1. Best Answer
    Nikita Kipriyanov
    2025-01-27T14:54:21+08:002025-01-27T14:54:21+08:00

    原因只有一个,不是 OpenVPN,而是你的操作系统路由数据包。如果没有client-to-client,OpenVPN 可以说以“简化路由”模式运行;它将来自 VPN 的所有内容转发到操作系统,并将来自操作系统的所有内容转发到 VPN。

    在您的例子中,当数据包来自一个客户端时,它会被交给操作系统,然后从接口中显示出来tun。操作系统会考虑其路由表,发现目的地位于tun数据包来源的同一接口后面,并将数据包转发到那里,从而将数据包返回给 OpenVPN。从 OpenVPN 的角度来看,这不是客户端到客户端的通信,而是客户端到操作系统和操作系统到客户端的通信。

    但是操作系统转发受其路由表、规则和防火墙的约束。您可以在容器内配置防火墙来防止这种情况。在 iptables 术语中,它将类似于iptables -A FORWARD -i tun0 -o tun0 -j REJECT(调整 tun 接口名称,或使用tun+,这是一种通配符)。


    附注:停止使用duplicate-cn选项。您可以完美地运行 VPN CA(使用 easy-rsa,很简单)并为每个客户端生成专用证书/密钥对;这样做。将它与ifconfig-pool-persist和放在一起也是(几乎)毫无意义的crl-verify。

    • 2

相关问题

  • OpenVPN:在哪里生成私钥?

  • 将 iPhone 连接到 OpenVPN

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • 最好的点对点 VPN?

  • 通过 VPN 使您的打印机可用的最佳方法是什么?

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve