针对 LAN 上的特定 IP 绕过 Linux 路由器上的 OpenVPN

针对 LAN 上的特定 IP 绕过 Linux 路由器上的 OpenVPN

我使用 Archlinux 作为网络计算机上的路由器,通过 VPN 加密所有互联网流量。但我需要为 LAN 上的一台设备绕过 Openvpn。其 IP 地址始终为 192.168.0.111。

我有3个主界面:

enp4s0 which is my WAN
enp1s0f0 which is my LAN
tun0 which is Openvpn Interface

我的 iptables 规则是:

#!/usr/bin/env bash

# enp1s0f0 is LAN (Distribute Internet Across Local Area Network or Devices on LAN)
# enp4s0 is WAN (Provide internet)
# tun0 is Openvpn Interface

EXT1="tun0"
EXT2="enp4s0"
INT="enp1s0f0"

iptables -t nat -F
iptables -F

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


iptables -t nat -A POSTROUTING -o $EXT1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $EXT2 -j MASQUERADE


iptables -A FORWARD -i $EXT2 -o $INT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT2 -j ACCEPT

iptables -A FORWARD -i $EXT1 -o $INT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT1 -j ACCEPT

除非我在 ovpn 配置中指定地址(目标地址),否则一切都将通过 VPN,因此它会绕过该特定站点或域的 openvpn。但除此之外,我希望我的 LAN 设备之一 (192.168.0.111) 绕过所有流量并直接通过我的 WAN。

当我在 ovpn 配置上指定它时,设备会丢失/删除所有连接,并且根本没有发送和接收。当我使用 ip Route 时,也会发生同样的事情。我知道这是我知识的缺乏。

我尝试使用 openvpn 配置来完成此操作,但无济于事。

我研究了很多,但信息对我来说太复杂了。

ip route 或 iptables 可能有一个简单的方法来为我做到这一点。谁能向我解释一下怎么做?很简单,我都能理解。

答案1

我终于找到办法了。

首先,我为 rt_tables 定义一个规则名称 eman(eman 是任意名称):

echo 200 eman>> /etc/iproute2/rt_tables

然后我将我的机器的 IP 地址添加到新创建的表中(请注意,该 IP 属于我想要绕过 OpenVPN 并直接连接到我的主网关的机器):

ip rule add from 192.168.0.111 table eman

然后通过我的主(WAN)接口(enp4s0)通过其网关(192.168.100.1)路由该表(eman)

ip route add default via 192.168.100.1 dev enp4s0 table eman

然后刷新缓存:

ip route flush cache 

如果有另一个设备(例如 192.168.0.113),我可以轻松地将其添加到表中:

ip rule add from 192.168.0.113 table eman

相关内容