iptables实战-DNAT、SNAT和负载均衡

马哥Linux运维

共 8291字,需浏览 17分钟

 ·

2022-12-18 01:05

iptabelsSNATDNAT

SNAT


debianens38,ip172.16.1.2/24172.16.1.1(routereth2)

router2eth1eth2eth1192.168.124.247192.168.124.1;eth2172.16.1.1debian

使debianping172.16.1.1pingdebianpingroutereth1ip192.168.124.247linuxipdebian ping 192.168.124.247ip172.16.1.1,dst ip192.168.124.247dst maceth2macroutermacmac(eth2mac)ip(eth1ip)

debianpingrouterrouterip_forwordrouter

echo 1 > /proc/sys/net/ipv4/ip_forward

debianrouter172.16.1.2routersnatdebiansnatroutereth1iprouterroutersnatdebian

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 192.168.124.247

debian

DNAT

router(192.168.124.247)debian(172.16.1.2)debian,sshrouterdebianrouter32200debian22

router32200PREROUTINGPREROUTINGdnat使ssh 192.168.124.24732200172.16.1.222

 iptables -t nat -A PREROUTING -d 192.168.124.247 -p tcp --destination-port 32200 -i eth0 -j DNAT --to-destination 172.16.1.2:22

nat


debian4ip4ip访

便nginxnginxip

      location / {
      return 200 <span data-raw-text="" "="" data-textnode-index-1671119076312="26" data-index-1671119076312="1621" data-textnode-notemoji-index-1671119076312="1621" class="character">"$remote_addr\n<span data-raw-text="" "="" data-textnode-index-1671119076312="28" data-index-1671119076312="1636" data-textnode-notemoji-index-1671119076312="1636" class="character">";
      }

nginxnginxip

debian

auto ens38
iface ens38 inet static
address 172.16.1.2
netmask 255.255.255.0
gateway 172.16.1.1
auto ens38:1
iface ens38:1 inet static
address 172.16.1.3
netmask 255.255.255.0
auto ens38:2
iface ens38:2 inet static
address 172.16.1.4
netmask 255.255.255.0
auto ens38:3
iface ens38:3 inet static
address 172.16.1.5
netmask 255.255.255.0

使ipPOSTROUTINGipiptablesstatistic

statistic

statistic
This module matches packets based on some statistic condition. It supports two distinct modes settable with the --mode option.
Supported options:
 --mode  

--mode mode
Set the matching mode of the matching rule, supported modes are random and nth.
randomnth  
[!] --probability p
Set the probability for a packet to be randomly matched. It only works with the random mode. p must be within 0.0 and 1.0. The supported granularity is in 1/2147483648th increments.
 P0.01.0 1/2147483648  
[!] --every n
Match one packet every nth packet. It works only with the nth mode (see also the --packet option).
n nth(--packet)  
--packet p
Set the initial counter value (0 <= p <= n-1, default 0) for the nth mode.
=p0 <= p <= n-1p=n-100nth

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

iptables -A POSTROUTING  -t nat -d 192.168.127.247 -m statistic --mode nth --every 4 --packet 0 -j SNAT --to-source 172.16.1.2
iptables -A POSTROUTING  -t nat -d 192.168.127.247 -m statistic --mode nth --every 3 --packet 0 -j SNAT --to-source 172.16.1.3
iptables -A POSTROUTING  -t nat -d 192.168.127.247 -m statistic --mode nth --every 2 --packet 0 -j SNAT --to-source 172.16.1.4
iptables -A POSTROUTING  -t nat -d 192.168.127.247 -m statistic --mode nth --every 1 --packet 0 -j SNAT --to-source 172.16.1.5

tcp0 ,+1snat172.16.1.2
tcp10,+1 snat172.16.1.3
tcp210+1 snat172.16.1.4
tcp3210+1every0 snat172.16.1.2

nat

root@debian:~# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  0.0.0.0/0            192.168.124.247      statistic mode nth every 4 to:172.16.1.2
SNAT       all  --  0.0.0.0/0            192.168.124.247      statistic mode nth every 3 to:172.16.1.3
SNAT       all  --  0.0.0.0/0            192.168.124.247      statistic mode nth every 2 to:172.16.1.4
SNAT       all  --  0.0.0.0/0            192.168.124.247      statistic mode nth every 1 to:172.16.1.5

root@debian:~# curl 192.168.124.247
172.16.1.2
root@debian:~# curl 192.168.124.247
172.16.1.3
root@debian:~# curl 192.168.124.247
172.16.1.4
root@debian:~# curl 192.168.124.247
172.16.1.5
root@debian:~# curl 192.168.124.247
172.16.1.2
root@debian:~# curl 192.168.124.247
172.16.1.3
root@debian:~# curl 192.168.124.247
172.16.1.4
root@debian:~# curl 192.168.124.247
172.16.1.5

https://blog.csdn.net/syaziou/article/details/123443578


浏览 27
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报