linux iptables在没有域名且网络不通的情况下实现将IP数据包从一个IP地址路由到另一个IP地址
linux iptables在没有域名且网络不通的情况下实现将IP数据包从一个IP地址路由到另一个IP地址
** 本文地址:https://www.cnblogs.com/muphy/p/17934332.html
场景
即使同一台服务器,在不同网络环境下访问的IP地址不同,处于不同的网段,且不同网段之间也不能ping通互通。
如在生产系统上遇到了一个问题,附件上传后会有下载地址和预览地址两个地址,预览插件采用第三方插件kkFileView
。
具体情况如下表
解决办法:采用nginx
+iptables
在10.11.0.100使用iptables建立nat实现IP转发
iptables -t nat -A OUTPUT -d 192.168.0.111 -j DNAT --to-destination 10.11.0.100
iptables -t nat -A OUTPUT -d 43.*.*.39 -j DNAT --to-destination 10.11.0.100
在10.11.0.100使用iptables实现端口转发
# 将本机8082转发到本机8080端口
iptables -t nat -A PREROUTING -p tcp --dport 8082 -j REDIRECT --to-ports 8080
# 将整个网段的8082转发到本地8080端口
# iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/24 --dport 8082 -j REDIRECT --to-ports 8080
# 本机端口转发到后端其他服务器的服务端口
# iptables -t nat -A PREROUTING -p tcp --dport 8082 -j DNAT --to 10.11.0.100:8080
# iptables -t nat -A POSTROUTING -d 10.11.0.100 -p tcp --dport 8080 -j SNAT --to 192.168.0.111
也可以在10.11.0.100新增nginx代理配置实现端口转发
server {
listen 8082;
server_name 10.11.0.100;
client_max_body_size 200m;
charset utf-8;
location / {
proxy_pass http://10.11.0.100:8080/;
#proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header REMOTE-HOST $remote_addr;
proxy_buffering off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
error_page 404 403 /40x.html;
location = /40x.html {
root html/403page;
}
}
}
iptables
扩展
参数解释
-t 指定nat还是filter表,默认filter表
-L 列出表内所有规则,可以指定特定链
-n 使输出中的IP地址和端口以数值的形式显示
-v 输出详细化
--line 显示出每条规则在相应链中的序号
-A 链中添加规则
-D 删除链中规则
-C 修改链中规则
-j 决定符合条件的包到何处去
-F 清空规则
PREROUTING 在包刚刚到达防火墙时改变它的目的地址
INPUT 从外部连接过来时的转发
OUTPUT 改变本地产生的包的目的地址
POSTROUTING 在包就要离开防火墙之前改变其源地址
DNAT:目的地址转换,将指定端口的入向过来的数据包里的目标IP和端口设置为后向服务器IP和端口,只能用在nat表的PREROUTING和OUTPUT链,--to-destination选项
SNAT:源地址转换,将目标地址为后向服务器IP的出向数据包里的源地址修改为转发服务器IP地址,后向服务器是不能直接回包到客户端的,所以需要改为转发服务器的P地址。
查看是否启用内核转发
# 输出1表示已开启
cat /proc/sys/net/ipv4/ip_forward
管理员启用内核转发
- 编辑
vim /etc/sysctl.conf
- 修改或新增配置
net.ipv4.ip_forward = 1
查看链路规则
iptables -t nat -nL --line
删除指定规则
# 删除PREROUTING链的规则2
iptables -t nat -D PREROUTING 2
# 清空规则
iptables -t nat -F
保存规则
# kali
iptables-save
# 其他linux
service iptables save
启停iptables
# kali
安装:apt-get install ufw
关闭:ufw disable
开启:ufw enable
# 其他
重启:systemctl restart iptables
停止:systemctl stop iptables
启动:systemctl start iptables
关于我
本人长期从事互联网相关技术研发,提供技术服务、多端软件开发、信息系统集成、信息技术咨询、上位机编写等。
联系方式,QQ&WX:1304023381