게이트웨이에서 부하 분산을 위해 IPtables를 사용하는 방법

게이트웨이에서 부하 분산을 위해 IPtables를 사용하는 방법

3개의 NIC가 있습니다. NIC1과 NIC2는 인터넷 연결에 사용되고 LAN은 인트라넷 연결에 사용됩니다.

IP 테이블을 사용하여 ISP에 대한 부하 균형을 맞추고 싶습니다. 나는 멍청한 놈이기 때문에 다음 코드에 내 조잡한 시도가 주어졌지만 분명히 성공하지 못했습니다. 이 코드는 해당 주제에 관한 많은 웹사이트를 살펴봄으로써 구성되었습니다.

Round-Robin 방식을 사용하여 LAN으로 들어오는 인터넷을 최적으로 사용하고 싶습니다.

또는

라우팅 테이블을 사용하여 두 개의 isps, 즉 시스템 1~5(ISP1) 및 5~10(ISP2)을 분할할 수 있습니까?

누군가가 나를 도와주길 바랍니다. 정말 감사합니다.

set -x
IPT="/sbin/iptables"
NIC1="enp4s5f0"
NIC2="enp4s5f1"
LAN="ens2"
ISP1="192.168.9.33"
ISP2="192.168.10.33"

#***************
# reset iptables
#_______________
## reset the default policies in the filter table.
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

## reset the default policies in the nat table.
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

## reset the default policies in the mangle table.
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT

## flush all the rules in the filter and nat tables.
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

## erase all chains that's not default in filter and nat table.
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X


#*********************
# enable IP forwarding
#_____________________
echo 1 > /proc/sys/net/ipv4/ip_forward


#****************
# rules 
#________________
$IPT -A INPUT -m state --state INVALID -j DROP 
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A INPUT -p icmp -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 

$IPT -A FORWARD -m state --state INVALID -j DROP 
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
$IPT -A FORWARD -p icmp -j ACCEPT 

$IPT -t nat -A PREROUTING -i NIC1 -p tcp --dport 80\ 
            -m state --state NEW -m statistic --mode\ 
            random --probability .33 -j  DNAT --to-destination 10.1.1.1:1

$IPT -t nat -A PREROUTING -i NIC2 -p tcp --dport 80\ 
            -m state --state NEW -m statistic --mode\ 
            random --probability .33 -j  DNAT --to-destination 10.1.1.1:2

$IPT -A FORWARD -i $NIC1 -o $LAN -j ACCEPT
$IPT -A FORWARD -i $NIC2 -o $LAN -j ACCEPT


# ifconfig -a


#********************************
# allow certain hosts full access
#________________________________

allowHost() {
    $IPT -A FORWARD -i $LAN -s $1 -j ACCEPT 
}

allowHost 192.168.2.10
allowHost 192.168.2.11
allowHost 192.168.2.12
allowHost 192.168.2.13
allowHost 192.168.2.14
allowHost 192.168.2.15

####Extra
$IPT -A FORWARD -d 8.8.8.8 -p tcp -m multiport --dports 53 -j ACCEPT

#********************
# block anything else
#____________________
$IPT -A FORWARD -j LOG -m limit --limit 10/minute --limit-burst 1 --log-prefix "Blocked:"
$IPT -A FORWARD -j DROP

/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe iptable_nat

네트워크 지형

답변1

경고: 실행하기 전에 먼저 읽어 보십시오.

면책조항: 테스트되지 않음

전제 조건:

  1. iptables 영구 패키지 설치

    sudo apt-get install iptables-persistent
    
  2. 기존 iptables 규칙을 백업하십시오.

    sudo iptables-save > ~/iptables-export
    
    • 복원하다:

      sudo iptables-restore < ~/iptables-export
      
  3. 이전 iptables 규칙을 플러시합니다.

    sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X && sudo iptables -t nat -X && sudo iptables -t mangle -X
    

단계:

  1. NIC 중 하나의 패킷을 처리하려면 터미널에서 이 명령을 사용하여 새 "경로 테이블"을 추가하세요.

    sudo bash -c 'echo "1 rt2" >> /etc/iproute2/rt_tables'
    
  2. IPv4 전달 활성화

    sudo sysctl net.ipv4.ip_forward=1
    sudo sysctl -p
    
  3. "가장"을 허용하는 필터 추가

    sudo iptables -t nat -A PREROUTING -i enp4s5f1 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.90
    sudo iptables -t nat -A PREROUTING -i enp4s5f0 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.90
    
    
    sudo iptables -t nat -A POSTROUTING -o ens2 -j MASQUERADE
    sudo netfilter-persistent save
    sudo netfilter-persistent reload
    
  4. 파일을 편집 /etc/network/interfaces하고 두 번째 NIC에 대한 구성을 추가합니다. 물론오래된 것을 복사해 보세요,

    sudo cp /etc/network/interfaces /etc/network/interfaces.bkup:

    iface enp4s5f1 inet static
        address <YOUR_NIC_ADD>/24
        netmask 255.255.255.0
        post-up ip route add 192.168.10.0/24 dev enp4s5f1 src 192.168.10.33 table rt2
        post-up ip route add default via 192.168.10.1 dev enp4s5f1 table rt2
        post-up ip rule add from 192.168.10.33/32 table rt2
        post-up ip rule add to 192.168.10.33/32 table rt2
    
    • 네트워크 관리자를 다시 시작합니다.

      sudo  systemctl restart NetworkManager.service
      
  5. iptable 규칙을 추가합니다:

    sudo iptables -t nat -A PREROUTING -i enp4s5f0 -m state --state NEW -m statistic --mode nth
     --every 5 --packet 0 -j DNAT --to-destination 192.168.2.26
    
    sudo iptables -t nat -A PREROUTING -i enp4s5f0 -m state --state NEW -m statistic --mode nth
     --every 4 --packet 0 -j DNAT --to-destination 192.168.2.27
    
    sudo iptables -t nat -A PREROUTING -i enp4s5f0 -m state --state NEW -m statistic --mode nth
     --every 3 --packet 0 -j DNAT --to-destination 192.168.2.28
    
    sudo iptables -t nat -A PREROUTING -i enp4s5f0 -m state --state NEW -m statistic --mode nth
     --every 2 --packet 0 -j DNAT --to-destination 192.168.2.29
    
    sudo iptables -t nat -A PREROUTING -i enp4s5f0 --to-destination 192.168.2.30
    

=====================================

    sudo iptables -t nat -A PREROUTING -i enp4s5f1 -m state --state NEW -m statistic --mode nth
     --every 5 --packet 0 -j DNAT --to-destination 192.168.2.21

    sudo iptables -t nat -A PREROUTING -i enp4s5f1 -m state --state NEW -m statistic --mode nth
     --every 4 --packet 0 -j DNAT --to-destination 192.168.2.22

    sudo iptables -t nat -A PREROUTING -i enp4s5f1 -m state --state NEW -m statistic --mode nth
     --every 3 --packet 0 -j DNAT --to-destination 192.168.2.23

    sudo iptables -t nat -A PREROUTING -i enp4s5f1 -m state --state NEW -m statistic --mode nth
     --every 2 --packet 0 -j DNAT --to-destination 192.168.2.24

    sudo iptables -t nat -A PREROUTING -i enp4s5f1 -j DNAT --to-destination 192.168.2.25

    sudo netfilter-persistent save
    sudo netfilter-persistent reload

원천:

https://scalingo.com/articles/2018/04/20/iptables.html

https://www.webair.com/community/simple-stateful-load-balancer-with-iptables-and-nat/

http://ipset.netfilter.org/iptables-extensions.man.html

https://www.linuxquestions.org/linux/answers/Networking/Spanning_Multiple_DSLs

iptables의 규칙을 저장하는 방법은 무엇입니까?

https://linuxconfig.org/how-to-restart-network-on-ubuntu-16-04-xenial-xerus-linux

관련 정보