質問: 複数のインターネットプロバイダーを備えたルーターとしてのlinux ルーターとしてのlinux:3つのインターネットプロバイダーがあり、それぞれに独自のモデムがあります。provider1、これはゲートウェイアドレス192.168.1.1です linuxルーターに接続eth1/192.168.1.2プロバイダー2、ゲートウェイアドレス192.168.2.1 linuxルーターに接続eth2/192.168.2.2provider、ゲートウェイアドレス192.168.3.1 linuxルーターに接続eth/192.168.3.2 ________ +------------+ / | | | +----------------------+ provider 1 +--------| __ |192.168.1.2 |192.168.1.1 | / ___/ \_ +------+-------+ +------------+ | _/ \__ | eth1 | +------------+ / / \ eth0| |192.168.2.2 | | | |client network -----+ router eth2|--------------+ provider 2 +------| internet \10.0.0.0/24 __/ | | |192.168.2.1 | | \__ __/ | eth3 | +------------+ \ \___/ +------+-------+ +------------+ | |192.168.3.2 | | \ +----------------------+ provider 3 +-------| |192.168.3.1 | | +------------+ \________ ネットワーク10.0.0.0/24のクライアントをソースipで別のゲートウェイにルーティングしたいと思います。 クライアントネットワークへのインターフェイスはeth/10.0.0.1で、これはすべてのクライアントのデフォルトゲートウェイです。例えば: 10.0.0.11はprovider1 @ eth1にルーティングする必要があります 10.0.0.12はprovider2 @ eth2にルーティングする必要があります ...等々...ip routeとiptablesはsnatですが、正確な方法はわかりません。 これが私がこれまでに持っていたスクリプトです。 ipv4転送が有効になっています。#!/bin/bash # flush tables ip route flush table connection1 ip route flush table connection2 ip route flush table connection3 # add the default gateways for each table ip route add table connection1 default via 192.168.1.1 ip route add table connection2 default via 192.168.2.1 ip route add table connection3 default via 192.168.3.1 # add some ip addresses for marking iptables -t mangle -a prerouting -s 10.0.0.11 -j mark --set-mark 1 iptables -t mangle -a prerouting -s 10.0.0.12 -j mark --set-mark 2 iptables -t mangle -a prerouting -s 10.0.0.13 -j mark --set-mark 3 # add the source nat rules for each outgoing interface iptables -t nat -a postrouting -o eth1 -j snat --to-source 192.168.1.2 iptables -t nat -a postrouting -o eth2 -j snat --to-source 192.168.2.2 iptables -t nat -a postrouting -o eth3 -j snat --to-source 192.168.3.2 # link routing tables to connections (?) ip rule add fwmark 1 table connection1 ip rule add fwmark 2 table connection2 ip rule add fwmark 3 table connection3 #default route for anything not configured above should be eth2
回答: これは、私たちのルーターの1つからの同様の設定です(いくつかの無関係なものは省略されています)。これは着信接続も処理することに注意してください。ハードコードされたマーク番号の代わりに変数を使用していることに注意してください。メンテナンスがとても簡単です!それらは別のスクリプトに格納され、読み込まれます。テーブル名は/etc/iproute2/rt_tables。インターフェース名は/etc/udev/rules.d/70-persistent-net.rules。##### fwmark ###### iptables -t mangle -f iptables -t mangle -x iptables -t mangle -a prerouting -j connmark --restore-mark iptables -t mangle -a prerouting -m mark ! --mark 0 -j return # if already set, we're done iptables -t mangle -a prerouting -i wan -j mark --set-mark $mark_cavtel iptables -t mangle -a prerouting -i comcast -j mark --set-mark $mark_comcast iptables -t mangle -a prerouting -i vz-dsl -j mark --set-mark $mark_vzdsl iptables -t mangle -a postrouting -o wan -j mark --set-mark $mark_cavtel iptables -t mangle -a postrouting -o comcast -j mark --set-mark $mark_comcast iptables -t mangle -a postrouting -o vz-dsl -j mark --set-mark $mark_vzdsl iptables -t mangle -a postrouting -j connmark --save-mark ##### nat ###### iptables -t nat -f iptables -t nat -x for local in «list of internal ip/netmask combos»; do iptables -t nat -a postrouting -s $local -o wan -j snat --to-source «ip» iptables -t nat -a postrouting -s $local -o comcast -j snat --to-source «ip» iptables -t nat -a postrouting -s $local -o vz-dsl -j snat --to-source «ip» done # this is an example of what the incoming traffic rules look like for extip in «list of external ips»; do iptables -t nat -a prerouting -p tcp -d $extip --dport «port» -j dnat --to-destination «internal-ip»:443 done そしてルール:ip rule flush ip rule add from all pref 1000 lookup main ip rule add from a.b.c.d/29 pref 1500 lookup comcast # these ips are the external ranges (we have multiple ips on each connection) ip rule add from e.f.g.h/29 pref 1501 lookup cavtel ip rule add from i.j.k.l/31 pref 1502 lookup vzdsl ip rule add from m.n.o.p/31 pref 1502 lookup vzdsl # yes, you can have multiple ranges ip rule add fwmark $mark_comcast pref 2000 lookup comcast ip rule add fwmark $mark_cavtel pref 2001 lookup cavtel ip rule add fwmark $mark_vzdsl pref 2002 lookup vzdsl ip rule add pref 2500 lookup comcast # the pref order here determines the default—we default to comcast. ip rule add pref 2501 lookup cavtel ip rule add pref 2502 lookup vzdsl ip rule add pref 32767 lookup default ルーティングテーブルは/etc/network/interfaces、インターフェイスを停止すると、別のインターフェイスを使用するように切り替わります。iface comcast inet static address a.b.c.q netmask 255.255.255.248 up ip route add table comcast default via a.b.c.r dev comcast down ip route flush table comcast 注:フィルタリングも(おそらくそうしている)場合、forwardからacceptまでの適切なルールをトラフィックに追加する必要もあります。特に着信トラフィックの場合。