用iptables做NAT代理,使内网机器上外网

本文介绍如何通过配置服务器B的路由转发功能及SNAT规则,实现无法直接访问外网的服务器A通过服务器B访问互联网的方法。具体步骤包括启用服务器B的路由转发、设置SNAT规则、保存规则并配置服务器A的默认网关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现状:
服务器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

如果想让整个网段都通过服务器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
### 配置 NAT 规则实现外部网络请求转发至内部局域网 为了将外部网络请求通过 NAT 转发到内部局域网,需要完成以下几个方面的配置: #### 1. **理解 NAT 类型** 完全圆锥形 NAT 是一种较为宽松的 NAT 实现方式,在这种情况下,只要接收到匹配 NAT 表项的报文,就能将其发送到内网设备[^1]。这意味着外部流量可以通过特定规则被路由到指定的内网设备。 #### 2. **配置 VMware 的 NAT 模式** 在 VMware 中启用 NAT 并进行相关设置时,需按照以下方法操作: - 进入 VMware 的虚拟网络编辑器并选择 `NAT` 模式的 VMnet8。 - 自定义子网范围(例如使用子网掩码 255.255.255.0 来限定 IP 地址池)[^2]。 - 设置 DHCP 或者手动分配静态 IP 给虚拟机以便于长期稳定的通信需求。 #### 3. **调整 NAT 设置** 进入 VMware 提供的 NAT 设置界面后执行如下动作: - 设定一个有效的网关地址作为该 NAT 环境下的出口,默认通常会自动提供一个合理选项;此值应记录下来用于后续主机端的相关配置。 - 对于高级功能部分如端口映射表单里增加条目来关联公网入口与私有目标机器之间的联系路径[^3]。 #### 4. **防火墙规则调整 (针对 Linux 客户端)** 假如目标服务器运行的是基于 Unix/Linux 的操作系统,则可能还需要额外开启相应的服务监听端口权限。比如允许 HTTP 流量经过防火墙到达本地应用层程序实例上可执行命令如下所示: ```bash sudo ufw allow 80/tcp ``` 以上步骤综合起来能够构建起从外界访问内部资源的基础架构支持体系结构。 ### 示例代码片段展示如何添加一条简单的端口转发规则(假设采用 iptables 工具) 以下是利用iptables工具创建的一条基本HTTP协议的服务重定向指令例子: ```bash # 添加SNAT规则使所有出去的数据包都带有固定的源IP地址 /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 创建DNAT规则把来自某个固定外网接口上的TCP连接请求导向给某台具体PC上的webserver进程处理 /sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to-destination 192.168.x.y:80 ``` 其中,“eth0”代表物理网卡名称,“192.168.x.y”则是实际存在的LAN侧Web Server所在的位置坐标信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值