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
경고: 실행하기 전에 먼저 읽어 보십시오.
면책조항: 테스트되지 않음
전제 조건:
iptables 영구 패키지 설치
sudo apt-get install iptables-persistent
기존 iptables 규칙을 백업하십시오.
sudo iptables-save > ~/iptables-export
복원하다:
sudo iptables-restore < ~/iptables-export
이전 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
단계:
NIC 중 하나의 패킷을 처리하려면 터미널에서 이 명령을 사용하여 새 "경로 테이블"을 추가하세요.
sudo bash -c 'echo "1 rt2" >> /etc/iproute2/rt_tables'
IPv4 전달 활성화
sudo sysctl net.ipv4.ip_forward=1 sudo sysctl -p
"가장"을 허용하는 필터 추가
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
파일을 편집
/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
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
https://linuxconfig.org/how-to-restart-network-on-ubuntu-16-04-xenial-xerus-linux