我有一台虚拟机,其内部接口连接到本地 LAN。虚拟机与另一个站点建立了有效的 OpenVPN 连接。如何使用 iptables 通过 VPN 隧道转发本地接口上的所有传入流量?我正在运行 Ubuntu 发行版。
答案1
为了能够使用现有连接实现站点到站点 VPN,您需要通过 VPN 拥有路由路径。假设您在站点 #1(无论哪个站点充当 OpenVPN 服务器,所有事物都是对称的)。
- 首先,您需要确保具有 VPN 连接的虚拟机(我们可以称之为“VPN#1”)可以访问远程子网。这可以通过使用 OpenVPN 配置添加路由来实现
- 如果“VPN#1”是 OpenVPN 客户端,您可以使用关键字将其添加到服务器中
push
,也可以使用route
- 如果“VPN#1”是OpenVPN服务器,您可以使用添加它
route
,或者使用外部工具,如ip
- 如果“VPN#1”是 OpenVPN 客户端,您可以使用关键字将其添加到服务器中
- 然后,您需要确保“VPN#1”和远程端点都启用了 IP 转发(使用 添加
net.ipv4.ip_forward=1
并/etc/sysctl.conf
重新加载sysctl -p
) - 如果 VPN#1 是默认网关,那么就完成了。如果不是,您需要在默认网关中为远程 LAN 添加静态路由,或者在 LAN 的每个主机上添加静态路由。
- 检查 VPN#1 中的防火墙:应将其配置为允许 LAN 和 VPN 接口之间的流量(使用 参见表
FORWARD
中的链)filter
iptables
如果您在远程端重复此操作,一切都会正常。使用ping
和traceroute
调试任何问题。
答案2
好的,现在可以正常工作了。我可以从本地 LAN 通过 RDP 访问另一端的服务器。我无法使用 smb 访问另一端 Windows 服务器上的管理共享。这是我使用的 IP 表规则:
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE /sbin/iptables -A FORWARD -i tun0 -o ens160 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i ens160 -o tun0 -j ACCEPT