使用 iptables + OpenVPN 进行 NAT,不影响主机

使用 iptables + OpenVPN 进行 NAT,不影响主机

我希望利用 Linux 设备作为默认网关,通过 OpenVPN 连接路由主机外的流量没有影响主机路由互联网。我不希望主机的流量通过 VPN 传出,只希望来自其他设备的流量通过 VPN 传出。

我已经成功配置了 NATing,让使用我的主机作为默认网关的设备的流量使用主机上的默认路由出口(例如,如果 VPN 是开放的,则通过 VPN 进行传输,如果没有,则通过主机的正常互联网连接进行传输,主机作为跟踪路由中的附加跳转)

但是,我无法成功配置这一点,因此 OpenVPN 连接没有影响主机网络让主机通过 OpenVPN 接口路由网关流量

我所做的事情: - 配置 IP 转发并验证其正常工作 - 能够停止 OpenVPN 更新主机上的默认路由,route-nopull并且pull-filter ignore redirect-gateway

我猜测这其中要么有一个动态部分(从开放的 vpn 配置中提取路由信息),要么希望有一个“不,真的,只是将这些路由应用于 NAT 流量”标志/设置。

网络配置:

  • 通过无趣的路由器访问互联网,没有任何花哨的功能
  • Linux 设备(Raspberry Pi)有线连接到网络,运行 ufw、iptables、openvpn
  • 其他有线设备,其中一些我想手动将其默认网关设置为 Linux 设备
  • 子网是192.168.0.0/24

答案1

现在我并没有坐在电脑前,但这是我的总体想法:

首先:

让 Raspberry 拥有一个静态 IP 地址,其默认网关就是无聊的路由器。

如果无聊的路由器充当 DHCP 服务器,那么停用它!让 Raspberry 成为 DHCP 服务器(或网络上的另一台主机)。

让 DHCP 服务器广播 Raspberry 设备作为网络的默认路由器,而不是无聊的路由器。

然后 Traceroute 将会是:

主机 -> 树莓派 -> 无聊路由器 -> 互联网

现在,魔法出现了。

如果您想将流量转移到 VPN 上,而不是通过默认的出门方式,那么您应该source based routing在 Raspberry 上使用。

通过 VPN 的特定主机的跟踪路由将是:

主机 -> Raspberry -> Openvpn 隧道 -> 互联网。

为了实现此功能,ip forwarding必须在 Raspberry 和 VPN 服务器上启用它。

我下班回家后会进一步解释这个答案。:-)

编辑

快速回顾一下基于源的路由:

我在用这一页作为我的解决方案的基础。

这个想法就是根据流量的来源来确定如何转发流量。

Linux 中的默认路由表称为main。您可以使用命令查看所有路由表的名称ip rule show

它应该默认给出这个输出:

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Raspberry 将检查所有匹配的规则,并使用第一个匹配的规则转发包。

由于该表main包含如下规则:

default via <boring routers ip address> dev eth0

然后,它会将所有流量转发到无聊的路由器以便到达互联网。

但关键来了:您可以为所有想要通过 VPN 连接发送的主机创建单独的路由表。为简单起见,我们将其称为路由表openvpn

你必须改变它/etc/iproute2/rt_tables,所以它看起来像这样:

#
# reserved values
#
255     local
254     main
253     default
200     openvpn # <-- Note THIS line!
0       unspec
#
# local
#
#1      inr.ruhep

假设您想通过 VPN 转移另一台 IP 地址为 192.168.0.100 的机器,那么您可以制定一条规则,内容如下:

ip rule add from 192.168.0.100 table openvpn

如果我们假设隧道内的 VPN 网关的 IP 地址是 10.0.0.1,那么您可以使用以下命令设置默认路由:

ip route add default via 10.0.0.1 table openvpn dev tun0

如果网络上的所有主机都使用 Raspberry 作为网关,那么它们的所有流量都将转发到路由器除了如果流量来自 192.168.0.100。在这种情况下,它将通过 VPN 链接转发。

这就是你要找的吗?:-)

相关内容