基于OpenVPN的跨路由器LAN服务端口永久转发及双向互通问题求助与解决
基于OpenVPN的跨路由器LAN服务端口永久转发及双向互通问题求助与解决
各位大佬好,抱歉如果这个问题已经在别的帖子里讨论过了,但我找了一圈没找到适合我的解决方案,想请教下大家:
我有个关于跨路由器网络的问题,想把路由器R2下主机192.168.1.21上任意服务的端口永久共享给路由器R1下的主机192.168.1.121。目前网络里R1下有台192.168.1.112服务器,通过OpenVPN的tun0隧道连接到R2下的192.168.1.20服务器。我现在能用SSH隧道转发端口,但想要个永久的方案,麻烦各位帮忙出出主意,所有服务器都是Linux系统。
相关配置信息
OpenVPN服务器配置(192.168.1.112)
local 192.168.1.112 port 1194 proto tcp4 dev tun ca ca.crt cert server-dell.crt key server-dell.key # This file should be kept secret dh dh2048.pem server 10.8.0.0 255.255.255.0 #ifconfig 10.8.0.1 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt client-config-dir ccd ;push "route 192.168.1.0 255.255.255.0" ;push "route 10.8.0.0 255.255.255.0" ;push "route 192.168.2.0 255.255.255.0" ;route 192.168.2.0 255.255.255.0 client-to-client push "route 192.168.1.0 255.255.255.0" push "route 10.8.0.0 255.255.255.0" push "route 192.168.2.0 255.255.255.0" route 192.168.2.0 255.255.255.0 keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC status /var/log/openvpn/openvpn-status.log verb 3
OpenVPN客户端配置目录(ccd)内容
ifconfig-push 10.8.0.10 255.255.255.0 iroute 192.168.2.0 255.255.255.0
排查与调整过程(按时间线)
2024-03-08 更新
我把R2下的内网地址改成了192.168.2.0,还给两台路由器都加了路由。但执行 traceroute 后发现:
- R1下的PC无法在浏览器打开R2的管理页面(192.168.2.1)
- 目标主机192.168.2.21在R2内网能正常ping通,但跨网访问有问题
附上相关信息:
- PC1 traceroute 结果:
[此处为tracert 1、tracert 2内容]
- R1路由器配置(192.168.1.1):
[R1 config内容]
- R2路由器配置(192.168.2.1):
[R2 config内容]
2024-03-09 更新
现在的情况有点奇怪:
- R1下的PC1(192.168.1.120)能正常访问OpenVPN服务器(10.8.0.1)上的服务,但访问不了OpenVPN客户端(10.8.0.10)或者192.168.2.20的服务
- R2下的Windows 10虚拟机(192.168.2.22)却能正常访问192.168.1.112的服务
简单说就是客户端LAN能看到服务器LAN,但服务器LAN看不到客户端LAN
2024-03-10 更新
补充个之前没提到的细节:OpenVPN的tun0客户端其实是R2内网里的另一台主机(192.168.2.115),之前没画在拓扑图里。
2024-03-11 更新
在OpenVPN服务器上添加了iptables规则后,服务器本身已经能ping通客户端LAN的机器,也能正常访问比如Webmin这类服务了,但R1下的LAN主机(比如PC1 192.168.1.120)还是没法ping通客户端LAN的机器,也访问不了对应的服务。
最终解决方法
终于搞定了LAN到LAN的双向互通!解决方案是在OpenVPN服务器上执行以下iptables命令(注:之前试的命令里有个-J的笔误,正确是小写-j):
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o enp2s0 -j ACCEPT iptables -A FORWARD -i enp2s0 -o tun0 -j ACCEPT
备注:内容来源于stack exchange,提问作者Vodek
相关产品推荐
相关产品推荐

