OpenVPN 和端口转发

OpenVPN 和端口转发

我的 Linux 服务器在 VPN 和端口转发方面存在问题。我也是这个领域的新手,所以如有错误,请多多包涵。

首先,让我向您描述一下基础设施。我有一台 Linux VPS 服务器 (S1) 正确配置了 openvpn,以及一台装有 Linux 的机器(C1) 也正确配置了 openvpn。它们使用端口号进行连接1194. 基本方案如下:

    S1
    [ip: X.X.X.221]
    [tun0 ip: 10.8.0.1]

    C1
    [ip: Y.Y.Y.19]
    [tun0 ip: 10.8.0.6]

我说配置正确是因为我可以从C1

现在,问题来了......我有一个服务P1在端口上运行1800S1,以及该服务的客户端C1。我可以成功提供 IP 地址XXX221:1800给客户C1,但我希望客户端访问P1通过 VPN 连接。有这种方法吗?

起初我以为这只是一个端口转发问题,我需要做的就是转发来自端口的每个请求1194前往港口1800,我找到了这个命令来做这件事(顺便说一下,venet0是我的界面):

    iptables -t nat -A PREROUTING -i venet0 -p udp --dport 1194 -j REDIRECT --to-port 1800

但这是行不通的。

有什么帮助吗?谢谢 :)


编辑1:

发行结果netstat -rn10.8.0.6S1

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    10.8.0.2        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
    10.8.0.0        10.8.0.2        255.255.255.0   UG        0 0          0 tun0
    0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 venet0

    traceroute to 10.8.0.6 (10.8.0.6), 30 hops max, 60 byte packets
     1  10.8.0.6 (10.8.0.6)  116.769 ms  119.000 ms  120.618 ms

发行结果netstat -rntraceroute 10.8.0.1C1

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 eth0
    10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
    10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
    192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

    traceroute to 10.8.0.1 (10.8.0.1), 30 hops max, 38 byte packets
     1  10.8.0.1 (10.8.0.1)  83.825 ms  83.639 ms  86.877 ms

编辑2:

配置文件S1(我相信以不予考虑):

    ;local a.b.c.d
    port 1194
    proto udp
    dev tun
    ;dev-node MyTap
    ca ca.crt
    cert server.crt
    key server.key  # This file should be kept secret
    dh dh2048.pem
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
    ;push "route 192.168.10.0 255.255.255.0"
    ;push "route 192.168.20.0 255.255.255.0"
    ;client-config-dir ccd
    ;route 192.168.40.128 255.255.255.248
    ;client-config-dir ccd
    ;route 10.9.0.0 255.255.255.252
    ;learn-address ./script
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option WINS 8.8.4.4"
    ;client-to-client
    ;duplicate-cn
    keepalive 10 120
    ;tls-auth ta.key 0 # This file is secret
    ;cipher BF-CBC        # Blowfish (default)
    ;cipher AES-128-CBC   # AES
    ;cipher DES-EDE3-CBC  # Triple-DES
    comp-lzo
    ;max-clients 300
    user root
    group root
    persist-key
    persist-tun
    status openvpn-status.log
    ;log         openvpn.log
    ;log-append  openvpn.log
    verb 3
    ;mute 20

配置文件C1

    client
    remote 176.9.192.221 1194
    ca ca.crt
    cert client.crt
    key client.key
    cipher BF-CBC
    comp-lzo
    dev tun
    proto udp
    nobind
    persist-key
    persist-tun
    user root
    group root

答案1

10.8.0.1您可以手动删除 C1 上现有的和静态路由10.8.0.5;例如:

route del -net 10.8.0.1 gw 10.8.0.5 netmask 255.255.255.255 dev tun0

然后使用以下命令在 C1 上添加新路线:

route add -net 10.8.0.1 gw 10.8.0.6 netmask 255.255.255.255 dev tun0

看看是否可行。记得跟踪您的旧路由,以防您需要重新添加它们。这应该可以解决您的 VPN 路由问题。

另一个问题是您的 VPN 网络无法与 OpenVPN 服务器 NIC 所在的网络通信。您可以通过在这些网络的每一侧添加新的静态路由来解决此问题。

在 C1 上:

route add -net X.X.X.221 gw 10.8.0.6 netmask 255.255.255.255 dev tun0

在 S1 上:

route add -net Y.Y.Y.19 gw 10.8.0.6 netmask 255.255.255.255 dev tun0

注意:除非您可以撤消更改,否则我不建议这样做;以防它不起作用。

您也可以尝试使用push routeOpenVPN 配置中的选项。例如:

push "route  X.X.X.221 255.255.255.0"

最后,如果上述方法均无效,您可以尝试在 IPTABLES 中添加一些内容,以将来自 VPN 网络 (NAT) 的流量转发到 S1 上的本地网络。例如:

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -s 10.8.0.6 -p tcp --dport 1800 -j DNAT --to-destination X.X.X.221:1800

答案2

因此,只要您的 VPN 完全正常运行,您的服务 S1 就必须监听 VPN IP 10.8.0.1,并且您的客户端 C1 需要连接到 10.8.0.1:1800...。

答案3

看起来您的 S1 服务配置没有监听 tun 接口。路由没有问题。您的服务是什么?您能显示它的配置吗?无论如何 - 在 S1 上尝试
telnet 10.8.0.1 1800telnet X.x.x.221 1800 如果您在某种情况下收到答案 - 在服务配置文件中搜索问题。

相关内容