我使用 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