iptables实现流量转发
参考文章
1 | https://blog.csdn.net/uiop_uiop_uiop/article/details/128095847 |
内网流量转发
本地端口转发
将本地访问本机 10001 端口的流量转发到本机 10002 端口。
1 | iptables -t nat -A OUTPUT -p tcp --dport 10001 -j REDIRECT --to-ports 10002 |
然后自己 curl
自己的 10001 端口,发现 10002 端口收到了流量。
外网端口转发
将外网访问本机 10001 端口的流量转发到本机 10002 端口。
1 | iptables -t nat -A PREROUTING -p tcp --dport 10001 -j REDIRECT --to-ports 10002 |
通过跳板机流量转发
假设转发服务器的地址 192.168.188.130
。目的服务器的地址是 114.132.243.19
。在转发服务器上把 8080
端口转发到 114.132.243.19
的 80
端口。
打开
ipv4
的转发功能。
[[arp攻击#arp实验]]1
echo 1 > /proc/sys/net/ipv4/ip_forward
在
PREROUTING
上修改目的地址1
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 114.132.243.19:80
这里的报错应该是复制粘贴的问题,好像复制的空格被看作了
,不是代码的问题,导致没有把 8080
和 j
识别分开。
- 在
POSTROUTING
上修改源地址或者用伪装的方式1
iptables -t nat -A POSTROUTING -d 114.132.243.198 -p tcp --dport 80 -j SNAT --to 192.168.188.130
1
iptables -t nat -A POSTROUTING -d 114.132.243.19 -p tcp --dport 80 -j MASQUERADE
- 为了防止在
FORWARD
上面被丢弃,添加规则允许通过。1
2
3
41.
iptables -I FORWARD -d 114.132.243.19 -p tcp --dport 80 -j ACCEPT
2.
iptables -I FORWARD -s 114.132.243.19 -p tcp --sport 80 -j ACCEPT
注意 iptables
的增加和删除有一定的延迟,测试的时候要注意。
现在就可以在客户端上测试一下访问 192.168.188.130:8080
就会访问到 114.132.243.19:80
。
IP重定向
简介
有时我们想让一个域名指向另一个 IP
时,我们会直接修改 /etc/hosts
,来实现我们的目地。那如果是访问一个 IP
,需要这个 IP
指向另一个 IP
呢?是的,iptables
可以实现这层转发。
场景一 : 家中有一台服务器内网 IP
192.168.0.111
, 公网 IP123.123.123.123
,你可以通过 IP123.123.123.123
在任何地方你都可以访问到你的服务器,在家的时候你可以通过内网来访问你的服务器,当然如果你在你家的电脑把123.123.123.123
指向192.168.0.111
那么你依然可以用外网来访问,但是其实走的是内网流量,速度会快很多。场景二 : 此场景源于最近装的
k8s
集群,由于 3 台机子不在一个内网中,所以需要用外网来建立集群。其中有参数可以配置用公网来启动集群,但是无论是阿里还是腾讯,都没有把公网绑在机子的网卡上,所以我一直启动失败。当绑定在内网上却可以启动成功,那我只能想到这个折中的方法了,因为他们内网是不通的,所以通过内网 IP 是不能访问的,可是用内网启动一定要用内网连接,那我把内网 IP 重定向到外网 IP 上不就可以了?事实证明真的成功组成了集群。当然如果有更好的解决方案也欢迎告知我。更多使用场景请自行发掘
把外网ip映射到内网ip
1 | iptables -t nat -A OUTPUT -d 123.123.123.123 -j DNAT --to-destination 192.168.0.111 |
把内网ip映射到外网ip
1 | iptables -t nat -A OUTPUT -d 192.168.0.111 -j DNAT --to-destination 123.123.123.123 |