使用 OpenVPN 进行端口转发

使用 OpenVPN 进行端口转发

设置了一个 openvpn 服务器,但在将端口转发到客户端时遇到了问题。

以下是我正在尝试做的事情:

WAN: 123.45.67.89:4444 -> [OpenVPN Server] -> CLIENT: 192.168.1.10:4444

看到了很多关于如何做到这一点的不同答案,但无论我怎么尝试,它似乎都不起作用,端口测试始终显示端口为关闭。

答案1

我假设您正在路由模式下使用 OpenVPN,并将其客户端通过 NAT 连接到 WAN。如果是这样,您需要执行以下操作:

iptables -t nat -A PREROUTING -i eth0 -d 123.45.67.89 -p tcp --dport 4444 -j DNAT --to-destination 192.168.1.10(将 eth0 更改为您的 WAN 实际所在的接口)。

如果您不使用 NAT,那么只需确保您尝试连接的主机知道将发往 192.168.1.10 的数据包路由到 123.45.67.89(这显然无法通过 Internet 路由到 RFC1918 IP)。无论如何,唯一的其他要求是您已启用 IPv4 路由(我认为如果没有启用,VPN 根本无法工作),并且您没有任何其他会阻止此流量的防火墙规则。

答案2

这就是我们在 iptables 中的解决方案。您仍然需要在 linux 中设置 ip_forward。

 *nat
:PREROUTING ACCEPT [56:16971]
:INPUT ACCEPT [1:52]
:OUTPUT ACCEPT [31:2256]
:POSTROUTING ACCEPT [31:2256]
-A POSTROUTING -s 10.2.0.0/24 -o enp1s0 -j MASQUERADE
-A PREROUTING -i enp1s0 -p tcp --dport 9000 -j DNAT --to-destination 10.2.0.22
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5618:4419840]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.2.0.0/24 -j ACCEPT
-A FORWARD -i enp1s0 -o tun1 -p tcp --dport 9000 --syn -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -i enp1s0 -o tun1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i tun1 -o enp1s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Dec 20 18:30:08 2017

答案3

  • 如果仅将 1194_UDP 端口从路由器转发到 OpenVPN 服务器,OpenVPN 服务器便可以在路由器后面的私有 IP 地址上工作。示例:路由器的公共 IP 1.1.1.1(WAN 接口)路由器的 LAN 接口 192.168.10.1 OpenVPN 服务器 IP 192.168.10.10

  • 在ROUTER上创建端口转发规则 Internal_port External_port Internal_Server_ip 1194 1194 192.168.10.10

  • 安装和配置OpenVPN Server时,将其IP设置为192.168.10.10

  • 在 client.ovpn 中将远程 ip 和端口设置为 1.1.1.1 1194(路由器公网 IP)。

相关内容