我有不同的互联网服务提供商的多个互联网连接,我需要通过特定的ISP链路路由一定的stream量。 我正在使用Debian。
设置如下;
eth0(IP地址是192.168.1.2,网关是192.168.1.1(192.168.1.1是一个多ADSL广域网路由器,有四个不同的ADSL连接负载均衡))
eth1(IP地址为10.254.239.1,这是本地networking,所有工作站都通过DHCP获取分配的IP地址)
eth2(IP地址是(假的)20.20.20.22与网关20.20.20.21)
目标是只通过eth2路由特定的stream量,而所有其他stream量通过eth0stream向4路WAN路由器。
我已经阅读了lartc.org的例子和许多其他的,但不能得到它的工作…
我所做的是
向/ etc / iproute2 / rt_tables添加了一个路由表
201 fiber
将以下内容添加到rc.local
ip route add 20.20.20.20 dev eth2 src 20.20.20.22 table fiber ip route add default via 20.20.20.21 table fiber ip route add 20.20.20.20 dev eth2 src 20.20.20.22 ip rule add fwmark 2 table fiber
修改了iptables脚本来;
iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT iptables -A INPUT -m state --state NEW -i ! eth2 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth2 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT iptables -t mangle -N fiber iptables -t mangle -A fiber -j MARK --set-mark 2 iptables -t mangle -A fiber -j ACCEPT # ONLY ROUTE TRAFFIC GOING TO 1.2.3.x OVER THE FIBER LINK iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.4 --dport 80 -j fiber iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.5 --dport 80 -j fiber iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.4 --dport 443 -j fiber iptables -t mangle -A PREROUTING -i eth1 -p tcp -d 1.2.3.5 --dport 443 -j fiber iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -i eth0 -o eth0 -j REJECT iptables -A FORWARD -i eth2 -o eth2 -j REJECT
在内核级别启用IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
我错过什么或做错了什么? 任何帮助非常感谢。
这些规则可能不会做你想要的。 第一个规则允许来自eth1和eth2的任何新连接,第二个规则允许eth0和eth1的所有连接。 这似乎允许从任何接口基本上使防火墙毫无意义的一切。
iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT iptables -A INPUT -m state --state NEW -i ! eth2 -j ACCEPT
你可以这个意思。
iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
无论如何,而不是添加到rc.local的东西,我可能会更新你的/ etc / network /接口看起来像这样。 我正在猜测你的面具,所以一定要检查和更新。 您可能应该将所有链路路由添加到光纤表。
auto eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 up ip route add table fiber scope link proto kernel dev eth0 192.168.1.0/24 auto eth1 iface eth1 inet static address 10.254.239.1 netmask 255.255.255.0 network 10.254.239.0 broadcast 10.254.239.255 up ip route add table fiber scope link proto kernel dev eth1 10.254.239.0/24 auto eth2 iface eth2 inet static address 20.20.20.22 netmask 255.255.255.252 network 20.20.20.20 broadcast 20.20.20.23 up ip route add table fiber scope link proto kernel dev eth2 20.20.20.20/30 up ip route add default via 20.20.20.21 table fiber up ip rule add fwmark 2 table fiber