我正在运行一个应用于 Linode 上多台服务器的 VLAN。分配的 IP 是10.0.16.n/24
通过同一范围内的 OpenVPN 服务器访问的。
我已经从本地笔记本电脑连接到 VPN 盒,可以 ping 并连接到网络上的 2 台服务器,但不能再连接了。我没有 OpenVPN 付费许可证,但我认为这无关紧要??
我检查了netstat -tulpn | grep :22
其中一台出现故障的服务器,发现
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 728/sshd: /usr/sbin
我有一条防火墙规则(在 UFW 上)22 ALLOW 10.0.0.0/16
我也无法 ping 通该盒子 - 我检查了 UFW 规则,它们是默认规则。这个盒子是 Ubuntu 22,而我可以本地连接的是 20,但除此之外,没有什么特别之处。我已完全关闭防火墙,但仍然没有成功。
有趣的是,从我可以连接的盒子,我还可以连接到 VLAN 上的其他盒子,而我无法远程执行此操作。这表明 OpenVPN 设置存在问题,但我遵循了标准的 Linode 教程,不确定哪些设置可能会影响它?
在 OpenVPN 配置下,Should VPN clients have access to private subnets (non-public networks on the server side)?
我使用的Yes - using Routing
是 Subnet10.0.16.0/32
答案1
VLAN 创建隔离的广播域,除非 openvpn 接口已标记正确的 vlan 标签,否则来自 openvpn 的流量将无法与 vlan 上的机器通信,即使它们具有相同的子网/范围。
我建议您在 openvpn 服务器上为 openvpn 接口启用 ip 转发,然后使用本地接口出站流量。
像在 root shell 中一样使用 sudo 运行以下命令。
sysctl net.ipv4.conf.eth1.forwarding=1
sysctl net.ipv4.conf.tun0.forwarding=1
如果不是 tun0,请将 tun0 替换为您的 openvpn 隧道接口的名称,可能是 tap0 或类似名称。您还需要对要转发流量的任何其他接口运行该命令。
您可以运行sysctl net.ipv4.conf.all.forwarding=1
,但这可能会产生安全问题,因此请与相关人员核实,并在启用之前进行检查。有时,快并不是最好的。
一旦确认此方法有效,您就可以使用以下命令更新 /etc/sysctl.conf:
net.ipv4.conf.eth1.forwarding=1
net.ipv4.conf.openvpn.forwarding=1
您需要将您的电脑的网关设置为 openvpn 端点的 IP 地址。然后运行:
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth+ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun+ -o as0t+ -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth+ -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i as0t+ -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.127.0/24 -o eth+ -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.127.0/24 -o as0t+ -j MASQUERADE
这将对来自您的客户端的任何连接进行 nat,并使用服务器的本地接口(能够访问所有机器)将流量转发到其他机器。
为了避免每次重启后都必须添加这些规则,请通过 apt 安装 iptables-persistent。iptables-persistent 将保存您的规则,并在每次重启时重新应用这些规则。
使用您提供的子网额外信息,您可以修改 openvpn 配置以将路由推送到您的 PC,而不是在 PC 上设置默认网关。在您的配置文件中的任何位置添加以下行,我建议将其添加到文件顶部附近设置 ip 的行下方。
push "route 10.0.16.0 255.255.255.0" #note this is /24 subnet, not 32 as you mentioned. a /32 is a host address written in CIDR format.
push "route 172.x.x.x 255.x.x.x"
push "route 172.x.x.x 255.x.x.x"
push "route 178.x.x.x 255.x.x.x"
push "route 192.168.x.x 255.255.x.x"
linode 中的“监听所有接口”选项控制 openvpn 监听哪些接口以进行初始连接。一旦建立了 vpn 连接,该选项对 vpn 的性能没有任何影响。