使用NAT转发实现内网机器访问外网
局域网内的机器可以通过 NAT 网关来访问外网。
- 192.168.128.140
- 192.168.128.141
- 192.168.128.142
- 192.168.128.145(可访问外网)
上例145机器可以访问外网。其他局域网机器可以将请求发送给145机器,145机器发出去后,再原路将响应数据返还给局域网机器。这个过程就是 NAT 转换。
NAT 映射表记录了转换关系。
源IP | 源端口 | NAT 网关机器IP | NAT 网关机器端口 | 目标IP | 目标端口 |
---|---|---|---|---|---|
192.168.128.140 | 8080 | 192.168.128.145 | 18080 | 172.217.27.142 | 80 |
- 192.168.128.140:8080 [request google.com] --> 192.168.128.145:18080
- 192.168.128.145:18080 [request google.com] --> google.com (172.217.27.14:80)
- google.com [response] --> 192.168.128.145:18080
- 查找映射表得知,18080获得的数据返还给 192.168.128.140:8080
- google.com [response] --> 192.168.128.140:8080
使用 Iptables 实现 NAT 转换
商用 NAT 转换通常使用专业的 NAT 路由器或防火墙。简单可以通过在网关配置 iptables 规则实现 NAT 转换。
本次实验:
- 192.168.128.140 --> 192.168.128.145
- 192.168.128.145 -—> 外网IP
重点是将 192.168.128.140 Gateway 网关重定向到 192.168.128.145 即可。
注意事项:
- 外网机器(192.168.128.145)需要支持并配置NAT转发。
- 内网机器需要选择实际使用的网卡来配置网关,注意DNS映射(
/etc/resolv.conf
,可修改为8.8.8.8
);
检查外网机器是否已经打开转发
# 查看是否已经打开,如果值为1,则已经打开
sysctl -a |grep 'net.ipv4.ip_forward'
# 未打开则需要修改配置文件 /etc/sysctl.conf,修改参数为1
net.ipv4.ip_forward = 1
#生效
sysctl -p
外网机器配置 NAT 转发规则
# 查看防火墙
[root@svr-145 ~]# service iptables status
# 设置NAT转换
## 单台机器
iptables -t nat -A POSTROUTING -s 192.168.128.140 -j SNAT --to 192.168.128.145
## 单个子网
iptables -t nat -A POSTROUTING -s 192.168.128.0/255.255.255.0 -j SNAT --to 192.168.128.145
内网机器 配置网关
# 设置网关
[root@svr-140 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.128.145
# 重启网卡
[root@svr-140 ~]# service network restart
[root@svr-140 ~]# ping google.com
PING google.com (172.217.27.142): 56 data bytes
64 bytes from 172.217.27.142: icmp_seq=0 ttl=48 time=55.486 ms
...
例子虽然简单,但能描述清楚 NAT 转换的过程。
posted on 2017-06-23 01:08 傅腾(futeng) 阅读(7009) 评论(1) 编辑 收藏 举报