OpenVPN 服务器将传入连接转发到客户端

OpenVPN 服务器将传入连接转发到客户端

设想

  • 互联网上的服务器已运行 OpenVPN 服务器。
  • 家中的客户端 1 在端口 5000(UDP 和 TCP)上运行应用程序,并通过其 OpenVPN 连接到服务器(应用程序绑定到 0.0.0.0)。
  • 工作中的客户端 2 想要通过互联网连接到客户端 1 的应用程序,但不连接到同一个 OpenVPN 网络。
  • 两个客户端都使用 Windows,而服务器使用 Linux(Ubuntu)。

Client-1 <===TUN0===> SERVER <===ETH0===> Client-2

问题

如何配置 OpenVPN 以将到达其 eth0 接口端口 5000 的传入连接请求转发到客户端 1 的 tun0 接口的 5000 端口,以便客户端 1 的应用程序可以通过 UDP 和 TCP 将内容返回给客户端 2?

答案1

幸运的是,我找到了答案ServerFault 问题

我从中获取了一些配置DigitalOcean 教程

启用端口转发后,sysctl我仍然需要添加一些iptables规则/etc/ufw/before.rules,它看起来像这样:

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#


# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

-A PREROUTING -i eth0 -p tcp -m tcp --dport 50100 -j DNAT --to-destination [Client-1's vpn address]:50100
-A PREROUTING -i eth0 -p udp -m udp --dport 50100 -j DNAT --to-destination [Client-1's vpn address]:50100

# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES


# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
.
.
.
.
.
# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT


# START OPENVPN RULES
-A FORWARD -d [Client-1's vpn address]/32 -p tcp -m tcp --dport 50100 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d [Client-1's vpn address]/32 -p udp -m udp --dport 50100 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# END OPENVPN RULES


# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

启用sysctl端口转发并设置特定于 IP 的端口转发iptables规则后,50100 端口现在已打开并转发到客户端 1 的端口。

相关内容