使用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
  1. 192.168.128.140:8080 [request google.com] --> 192.168.128.145:18080
  2. 192.168.128.145:18080 [request google.com] --> google.com (172.217.27.14:80)
  3. google.com [response] --> 192.168.128.145:18080
  4. 查找映射表得知,18080获得的数据返还给 192.168.128.140:8080
  5. google.com [response] --> 192.168.128.140:8080

使用 Iptables 实现 NAT 转换

商用 NAT 转换通常使用专业的 NAT 路由器或防火墙。简单可以通过在网关配置 iptables 规则实现 NAT 转换。

本次实验:

  1. 192.168.128.140 --> 192.168.128.145
  2. 192.168.128.145 -—> 外网IP

重点是将 192.168.128.140 Gateway 网关重定向到 192.168.128.145 即可。

注意事项:

  1. 外网机器(192.168.128.145)需要支持并配置NAT转发。
  2. 内网机器需要选择实际使用的网卡来配置网关,注意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编辑  收藏  举报