用ipset + mark替换每个主机路由和一条路由

时间:2018-06-18 12:16:51

标签: ip router iptables

我需要通过特定连接路由大量IP。我想为这个purpouse使用IPSET,而不是为每个IP添加一个路由。 我试图在machine1上运行以下示例:

ipset create TEST hash:net
ipset add TEST 8.8.8.8
ipset test TEST 8.8.8.8
#8.8.8.8 is in set TEST.
iptables -I OUTPUT -t mangle -m set --match-set TEST dst -j MARK --set-mark 1
ip rule add prio 100 fwmark 1 lookup 100
ip route add table 100 default dev eth1

注意,eth1上的machine1是一个vpn连接。现在我尝试在ping 8.8.8.8上运行machine1,但它会显示Destination Host Unreachable。在vpn机器上,我可以看到使用tcpdump的请求,但看起来machine1忽略或不检索流量。有人可以告诉我遗失了什么吗?

upd:在远程机器上我只观察arp请求,不确定它是否是重要的信息......

1 个答案:

答案 0 :(得分:1)

在Linux内核上,Reverse Path Filtering功能似乎存在问题,其中某些系统上的默认值设置为验证路由。它使您的网络更加安全,但是...如果标记数据包并通过抽象规则进行路由,则可能需要将rp_filter切换为2,这样才能接受非对称路由的数据包。

您只需要设置ti接口,即可通过该接口发送/接收流量。

可在https://access.redhat.com/solutions/53031上获得其他帮助