여러 인터넷 제공 업체가있는 라우터 인 Linux


16

라우터로서의 리눅스 : 3 개의 인터넷 공급자가 있으며 각각 고유 한 모뎀을 가지고 있습니다.

제공자 주소-게이트웨이 주소 192.168.1.1
Linux 라우터에 연결됨 eth1 /192.168.1.2

제공자 2 , 게이트웨이 주소 192.168.2.1
Linux 라우터 eth2 /192.168.2.2에 연결

제공자 3 , 게이트웨이 주소 192.168.3.1
Linux 라우터 eth3 /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 |       |
                                                   +------------+       \________

소스 IP를 통해 네트워크 10.0.0.0/24의 클라이언트를 다른 게이트웨이로 라우팅하고 싶습니다.
클라이언트 네트워크에 대한 인터페이스 는 모든 클라이언트의 기본 게이트웨이 인 eth0 /10.0.0.1입니다.

예 :
10.0.0.11은 Provider1 @ eth1로 라우팅되어야합니다 . 10.0.0.12는
Provider2 @ eth2로 라우팅되어야합니다
.

SNAT 를 사용 ip route하고 사용해야한다고 생각 iptables하지만 정확히 어떻게 알아낼 수는 없습니다.
여기까지 내가 가진 스크립트가 있습니다.
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

CONNMARK에 마크를 저장 / 복원하여 패킷 2..n (연결 추적에 의해 NAT로 표시됨)에 적용 할 수 있도록 추가해야합니다.
derobert

여기서 사용하는 구성의 발췌 부분에 대한 답변을 추가했습니다. 주말에 체크인해서 뭐든지
알아 볼게요

답변:


13

다음은 라우터 중 하나와 비슷한 설정입니다 (일부 관련이없는 항목 포함). 이것은 들어오는 연결도 처리 합니다.

하드 코딩 된 마크 번호 대신 변수를 사용하십시오. 유지 관리가 훨씬 쉬워졌습니다! 이들은 별도의 스크립트에 저장되고 소스로 제공됩니다. 테이블 이름은에서 구성됩니다 /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

참고 : 당신이하고 (당신은 아마있는)뿐만 아니라 필터링하는 경우 당신은 또한에 적절한 규칙을 추가해야합니다 FORWARDACCEPT트래픽. 특히 들어오는 트래픽의 경우.


대단히 감사합니다! 이제 필요에 맞게 수정하고 상자에로드하고이 게시물을 업데이트하겠습니다.
Flav

다시 한 번 매력처럼 작동합니다. '주문'에 대한 사전 주문 / 기본 경로는 제외합니다. (저는 eth2 여야합니다) 그러나 나는 일반적인 규칙을 추가 ip rule add from 10.0.0.0/24 pref 1400 lookup eth2하고 나중에 예외를 만들어서 그 문제를 해결했다고 생각 합니다.
Flav

1
@Flav 방화벽 설정 (예비)에서 예외를 설정할 수도 있습니다. BTW : 링크 된 질문 중 하나 ( unix.stackexchange.com/questions/70440/… )에이 구성의 일부에 대한 자세한 설명이 있습니다. 이러한 IP / 마스크 규칙은 실제로 내 구성에서 NAT가 아닌 트래픽에 대한 것입니다 (SNAT는 POSTROUTING에서 발생하므로 IP 규칙 이후에 발생 함)
derobert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.