通过 iptables 进行路由

通过 iptables 进行路由

我有一个 VPN 客户端,它会接触路由表,然后继续监视它,如果它被接触则退出。这是端点(例如笔记本电脑)所需的设置。

我想使用一台小型 PC 作为 VPN 端点,并通过它为 LAN (192.168.0.0/24) 上的其他计算机路由。

由于我无法触及路由表,并且所有数据包都强制通过 VPN 设备tun0,因此我想iptables可以帮助我将 192.168.0.0 网络的数据包 POSTROUTEing 返回到设备eth1

但我不确定这将如何工作,因为一旦它退出,eth1它应该解析 IPtoMAC,因为它已经在目标网络上,而且我不知道数据包是否已经解析或在它到达之前不会发生伊法斯。

有什么提示吗?

答案1

由于您没有提供更多信息,我不确定如何最好地回答。

因此,我尝试为您提供一些指导,故意忽略您无法修改路由表(您会明白为什么阅读我的建议):

取决于 VPN 客户端和在哪里它挂钩到内核的 FIB(转发信息库),您可能会幸运,因为 VPN 的 FIB 监控,或者使用您的表达式路由表,仅发生在localmain规则表中。您可以使用以下命令检查您的路由规则

ip rule show

对于标签“lookup”后面的每个字符串(它们是规则表条目),您可以从 FIB 查询相应的路由信息​​,使用

ip route show table <name>

如果运气好的话,您可以尝试构建符合您要求的规则,并在规则查找表中优先考虑它。例如(我编造了一些东西来让您领先),让我们添加一条比main某些流程具有更高优先级的新规则:

ip rule add from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 pref 12000
ip rule show
   0:   from all lookup local 
   12000:   from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 
   32766:   from all lookup main 
   32767:   from all lookup default 

在标准 Linux(本文中为 Ubuntu)系统上,您将看到三个默认规则表localmaindefault,通常仅在调用时才能看到该mainnetstat -rn

现在我们想用新的路由条目填充查找表 888 中的 FIB 条目:

ip route add default via 10.37.129.4 dev eth2 table 888

让我们看看表 888 中的路由条目是什么样子的:

ip route show table 888
  default via 10.37.129.4 dev eth2

我想你应该已经明白了。现在,关于您的特定路由需求,尚不清楚您到底想要实现什么目标。确保在使用规则表时刷新路由缓存:

ip route flush cache

请注意,使用 iproute2 架构,您基本上可以过滤和修改几乎任何 FIB 条目;规则条目甚至可以基于 fwmarks 和/或 u32 分类器来制作,如下所示(示例取自策略路由簿):

tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \
    match ip src 10.1.1.0/24 classid :1
ip rule add fwmark 1 table 1 prio 15000 realms 3/4
ip route add default via 192.168.1.1 table 1 src 192.168.1.254
ip route flush cache

对于规则表条目中的混乱情况,很多年前我准备了一个小的 bash 片段,将我的系统恢复到原始路由规则状态:

: ${KEEP:="local main default"}
while read prio rule; do
     continue=0
     for keep in ${KEEP}; do
         if [ "${rule//lookup ${keep}/}" != "${rule}" ]; then
             continue=1
         fi
     done
     if [ ${continue} -eq 0 ]; then
         ip rule del prio ${prio%%:*} ${rule//all/0/0}
     fi
done < <(ip rule show)

令人惊讶的是,似乎在存在十多年之后iproute2,似乎仍然只有少数人知道存在一个超越经典的宇宙“破碎的”ifconfig诸如或 之类的工具netstat

相关内容