用iptables做NAT代理,使内网机器上外网
2022/3/26 7:23:18
本文主要是介绍用iptables做NAT代理,使内网机器上外网,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
用iptables做NAT代理,使内网机器上外网
现状:
服务器A只有一个内网IP,不能上外网,内网IP与服务器B内网相通;服务器B有一个内网IP和公网IP。想实现服务器A也能上外网。
1 2 3 4 |
服务器A:内网网卡:eth0 内网IP:192.168.0.10 服务器B:内网网卡:eth0 内网IP:192.168.0.20 外网网卡:eth1 外网IP:203.195.45.182 |
实现方法:
1、在可以上外网的服务器B上,开启路由转发功能:
方法一:
1 |
# echo 1 > /proc/sys/net/ipv4/ip_forward |
注:上面命令在服务器重启之后会失效,可以编辑/etc/rc.d/rc.local把上面命令添加到最底部,实现开启自动执行。
方法二:
1 2 3 4 5 |
编辑/etc/sysctl.conf 找到net.ipv4.ip_forward = 0 修改为 net.ipv4.ip_forward = 1 最后保存。 执行sysctl -p命令使配置生效: # sysctl -p |
2、在可以上外网的服务器B上执行添加SNAT规则
1 |
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.10 -j SNAT --to 203.195.45.182 或者iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j MASQUERADE |
如果想让整个网段都通过服务器B上外网,修改上面规则命令中-s 192.168.0.10为-s 192.168.0.0/24,然后把想上外网的服务器默认网关改成192.168.0.20就可以了。
3、保存刚添加的iptables规则
1 |
# service iptables save |
4、在需要上外网的服务器A上,修改内网网卡eth0的默认网关为192.168.0.20
1 |
# route add default gw 192.168.0.20 |
修改后,查看路由表,确认已修改成功,测试已经可以上外网了
1 2 3 4 5 6 |
# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.0.20 0.0.0.0 UG 0 0 0 eth0 |
iptables配置使用 Snat 实现内网代理上公网【转】
NAT 全名是 Network Address Translation,字面上的意思是网络地址转换,它还可以分为源地址转换(SNAT)和目的地址转换(DNAT)。SNAT 主要是用来给内网的主机提供连接到 Internet 的默认网关,而 DNAT 主要将内网机器的端口映射到外网上面。
如果你在云服务商哪里(比如,阿里云/亚马逊云等)购买了多台机器,来组件一套服务的话(比如,应用和数据分离/数据库读写分离等),我们可以通过最外置的服务器公网来访问部署的服务,但是如果需要后置的内网机器来访问外网的话(比如,需要爬取网页信息/访问外部服务器等)的话,就比较尴尬了。
当然,这个时候,我们可以为需要访问外网的后置机器来配置云服务商的公网地址,达到上述的目的。或者,使用一些代理软件或工具达到同样的目录(支持多种协议类型)。但是,相对于使用防火墙规则来配置的话(比如,iptables/firewalld),会比较麻烦和费劲,此外还会有安装相关的问题(比如,软件工具等的bug或设计缺陷)。相对于使用一两条命令可以完成的事情,何必那么费时呢?
外置公网 IP 机器 - 系统配置
# 开启IP转发功能 $ sudo sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf # 使修改的配置生效 $ sudo sysctl –p
外置公网 IP 机器 - 防火墙配置
# 默认accept的情况下必须要执行,默认是drop的话则需要执行 $ sudo iptables -I FORWARD -s 172.16.3.0/24 -j ACCEPT $ sudo iptables -P INPUT ACCEPT $ sudo iptables -P FORWARD ACCEPT $ sudo iptables -P OUTPUT ACCEPT # 在iptables上面添加Snat防火墙转换规则 # 内网网段: 172.16.3.0/24 # 外置公网主机: 172.16.3.100 $ sudo iptables -t nat -I POSTROUTING -s 172.16.3.0/24 -j SNAT --to-source 172.16.3.100 或者iptables -t nat -A POSTROUTING -s 172.16.3.0/255.255.255.0 -o eth0 -j MASQUERADE # 阿里云的话需要在VPC中添加一条VPC路由 # 登录VPC控制台 -> 专用网络 -> 实例管理 -> 路由表 -> 管理中添加路由条目 目标网段 0.0.0.0/0 下一跳类型 ECS实例 ECS实例 i-29304w23 # 后置主机测试是否可以访问外网 $ ping www.bing.com
转自
配置使用 Snat 实现内网代理上网
https://mp.weixin.qq.com/s/pJRSLlkJPTwAfBW_xQUT8Q
Iptables实现公网IP DNAT/SNAT
发布时间:June 13, 2013 // 分类:Iptables // No Comments
Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象。
以下命令将客户端访问1.1.1.1的HTTP数据DNAT到2.2.2.2,很多人往往只做这一步,然后测试不能正常连接。
1 |
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to 2.2.2.2:80
|
想像一下此时客户端访问1.1.1.1的数据流程:
1 2 3 4 |
客户端访问1.1.1.1
1.1.1.1根据Iptables DNA将数据包发往2.2.2.2,此时源IP为客户端IP
2.2.2.2处理后根据源IP直接向客户端返回数据,要知道此时客户端是直接和1.1.1.1连接的
然后呢,客户端不知所云,不能正常连接
|
最后还要添加一条SNAT规则,将发到2.2.2.2的数据包SNAT,1.1.1.1充当代理服务器的角色。
1 |
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to- source 1.1.1.1
|
别忘记开启内核转发功能:
1 |
echo 1 > /proc/sys/net/ipv4/ip_forward
|
这篇关于用iptables做NAT代理,使内网机器上外网的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南