我在 vps 上有 openvpn。
此外,该 vps 有一个 apache 和一些服务(来自浏览器),我只想从我自己的 ip 或当我连接到我的 openvpn 时使用这些服务。
openvpn ip = vps ip
vps 有 iptable 规则:
-A INPUT -p tcp -m xx.xx.xx.xx --dport 12345 -j ACCEPT #(xx.xx.xx.xx = 我自己的 ip)
-A INPUT -s yy.yy.yy.yy/32 -j ACCEPT #(yy.yy.yy.yy = openvpn/vps ip)
在浏览器中:
我可以从自己的 IP 访问 12345/tcp。
我连接 openvpn(nat,我的外部 IP 正在更改为 yy.yy.yy.yy),我也可以访问该端口。
但是当我从不同的 ip (不是 xx.xx.xx.xx = 我自己的 ip) 连接到 openvpn 时,我无法连接服务端口 12345。
或者当我删除接受 xx.xx.xx.xx 输入的规则时->连接 openvpn-> 也无法连接服务端口 12345。
为什么?
因为 ip ovpn = 请求 ip,浏览器是否会直接从我自己的 ip 向 vps 发送数据包?例如:我的 ip -> 浏览器 -> vps 端口 12345 ?
而不是:我的 ip -> ovpn -> 浏览器 -> vps 端口 12345 ?
当我从任意 ip 连接 openvpn (nat) 时,我应该怎么做才能打开 12345 端口?
iptables LOG(当 ovpn nat 连接时):
5 月 21 日 22:36:38 my.domain 内核:[16599.174007] IN=eth0 OUT= MAC=[-] SRC=xx.xx.xx.xx DST=yy.yy.yy.yy LEN=52 TOS=0x00 PREC=0x00 TTL=109 ID=38136 DF PROTO=TCP SPT=8101 DPT=12345 WINDOW=64240 RES=0x00 SYN URGP=0
答案1
浏览器是否会直接从我自己的 ip 向 vps 发送数据包,因为 ip ovpn = 请求 ip?例如:我的 ip -> 浏览器 -> vps 端口 12345?
是的——尽管 VPN 客户端通过隧道路由所有内容,但 VPN 服务器本身被故意排除在外,否则你将有一个路由循环:如果到 VPS 的数据包被路由通过VPN,那么实际的 VPN 数据包也会再次通过 VPN 发送,无限次,永远不会真正发送到服务器。(这是因为标准 IP 路由不能只应用于特定端口 - 因此,如果您在端口 12345/tcp 上的服务通过 VPN,那么端口 1194/udp 上的 OpenVPN 数据包也会通过 VPN...)
在某些系统上,可能会有更精确的例外(例如在 Linux 上,可以使用“策略路由”和/或 iptables fwmarks),但这并不通用。
当我从任意 ip 连接 openvpn (nat) 时,我应该怎么做才能打开 12345 端口?
使用服务器的内部的地址(分配给 OpenVPN‘tun0’接口的地址)而不是外部地址。