我的 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在端口上运行1800在S1,以及该服务的客户端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 -rn
和10.8.0.6
S1:
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 -rn
和traceroute 10.8.0.1
C1:
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 route
OpenVPN 配置中的选项。例如:
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 1800
。
telnet X.x.x.221 1800
如果您在某种情况下收到答案 - 在服务配置文件中搜索问题。