Iptables 转发所有内部流量

Iptables 转发所有内部流量

我有一台虚拟机,其内部接口连接到本地 LAN。虚拟机与另一个站点建立了有效的 OpenVPN 连接。如何使用 iptables 通过 VPN 隧道转发本地接口上的所有传入流量?我正在运行 Ubuntu 发行版。

答案1

为了能够使用现有连接实现站点到站点 VPN,您需要通过 VPN 拥有路由路径。假设您在站点 #1(无论哪个站点充当 OpenVPN 服务器,所有事物都是对称的)。

  1. 首先,您需要确保具有 VPN 连接的虚拟机(我们可以称之为“VPN#1”)可以访问远程子网。这可以通过使用 OpenVPN 配置添加路由来实现
    • 如果“VPN#1”是 OpenVPN 客户端,您可以使用关键字将其添加到服务器中push,也可以使用route
    • 如果“VPN#1”是OpenVPN服务器,您可以使用添加它route,或者使用外部工具,如ip
  2. 然后,您需要确保“VPN#1”和远程端点都启用了 IP 转发(使用 添加net.ipv4.ip_forward=1/etc/sysctl.conf重新加载sysctl -p
  3. 如果 VPN#1 是默认网关,那么就完成了。如果不是,您需要在默认网关中为远程 LAN 添加静态路由,或者在 LAN 的每个主机上添加静态路由。
  4. 检查 VPN#1 中的防火墙:应将其配置为允许 LAN 和 VPN 接口之间的流量(使用 参见表FORWARD中的链)filteriptables

如果您在远程端重复此操作,一切都会正常。使用pingtraceroute调试任何问题。

答案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

相关内容