Birden fazla internet sağlayıcısına sahip yönlendirici olarak Linux


16

Yönlendirici olarak Linux: Her biri kendi modeme sahip 3 İnternet sağlayıcım var.

Ağ geçidi adresi 192.168.1.1 olan sağlayıcı1 , eth1
yönlendirici eth1 /192.168.1.2'ye bağlandı

Sağlayıcı2 , ağ geçidi adresi 192.168.2.1
Linux yönlendirici eth2 /192.168.2.2'ye bağlı

Sağlayıcı3 , ağ geçidi adresi 192.168.3.1
Linux yönlendirici eth3 /192.168.3.2'ye bağlı

                                                                           ________
                                                   +------------+         /
                                                   |            |        |
                            +----------------------+ 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 ağındaki istemcileri kaynak IP ile farklı ağ geçitlerine yönlendirmek istiyorum.
İstemci ağına arabirim , tüm istemciler için varsayılan ağ geçidi olan eth0 /10.0.0.1'dir.

Örneğin:
10.0.0.11,
Provider1 @ eth1'e yönlendirilmelidir. 10.0.0.12, Provider2 @ eth2'ye yönlendirilmelidir
... vb.

Ben kullanımına gerek ip routeve iptablesSNAT için, ama tam olarak nasıl çözemedim.
İşte şimdiye kadar sahip olduğum senaryo.
ipv4 iletimi etkinleştirildi.

#!/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

Sanırım, işaretleri kaydetmek / geri yüklemek için CONNMARK'a eklemeniz gerekir, böylece 2..n paketlerine uygulanabilir (bağlantı izleme ile NAT olacaktır)
derobert

Burada kullandığımız yapılandırmadan alıntılarla bir cevap ekledim. Hafta sonu her şeyi açıklığa kavuşturmak için kontrol etmeye çalışacağım ...
derobert

Yanıtlar:


13

İşte yönlendiricilerimizden birinden benzer bir kurulum (bazı alakasız şeyler kesilmiş). Bunun gelen bağlantıları da ele aldığını unutmayın .

Sabit kodlu işaret numaraları yerine değişkenlerin kullanımına dikkat edin. Bakımı çok daha kolay! Ayrı bir komut dosyasında saklanırlar ve kaynaklanırlar. Tablo adları yapılandırılır /etc/iproute2/rt_tables. Arayüz adları ayarlanmıştır /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

Ve kurallar:

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

Yönlendirme tabloları kurulur /etc/network/interfaces, böylece bir arabirimi kaldırmak farklı bir tablo kullanmaya geçer:

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

Not: Filtreleme de yapıyorsanız (muhtemelen sizsiniz), aynı zamanda ilgili kuralları da eklemeniz gerekir.FORWARD için ACCEPTtrafik. Özellikle gelen trafik için.


Çok teşekkür ederim! Şimdi bunu ihtiyaçlarıma göre değiştireceğim, kutuya yükleyeceğim ve bu yazıyı güncelleyeceğim.
Flav

Bir cazibe gibi çalışır, tekrar teşekkürler. 'Comcast' için ön sipariş / varsayılan yol hariç. (Benim için bu eth2 olmalı) Ama bence genel bir kural ekleyerek ip rule add from 10.0.0.0/24 pref 1400 lookup eth2ve daha sonra istisnalar yaratarak bunun etrafında çalıştım .
Flav

1
@Flav, istisnalarınızı güvenlik duvarı işaretleriyle de ayarlayabilirsiniz (PREROUTING bölümünde). BTW: Bağlantılı sorulardan biri ( unix.stackexchange.com/questions/70440/… ) bu yapılandırmanın bir kısmı hakkında daha fazla açıklamaya sahiptir. Bu ip / maske kuralları aslında benim yapılandırmamda NAT olmayan trafik içindir (SNAT POSTROUTING'de, dolayısıyla ip kuralıyla ilgili şeylerden sonra gerçekleşir)
derobert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.