Linux中部署SNAT和DNAT

来源:互联网 发布:java web开发用jsp吗 编辑:程序博客网 时间:2024/06/05 05:59

部署环境:

[root@miner_k html]# cat /etc/redhat-release CentOS release 6.5 (Final)

网络架构:

服务器A:(linux)—【NAT】
eth0:192.168.6.181/24 (能连接到互联网上)

服务器B:(Linux)
eth0:192.168.6.94/24

服务器C:(windows)
网卡1:192.168.6.6/24

SNAT的设置

在服务器A上的配置:

  1. 开启路由转发

临时开启:

[root@miner_k ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 

永久开启:

[root@miner_k ~]# vim /etc/sysctl.confnet.ipv4.ip_forward = 1[root@miner_k ~]# sysctl -p
  • 2 防火墙配置:
[root@miner_k ~]# iptables -t nat -I POSTROUTING -s 192.168.6.0/24 -j MASQUERADE或者:[root@miner_k ~]# iptables -t nat -I POSTROUTING -s 192.168.6.0/24 -j SNAT --to-source 192.168.6.181

服务器B的配置:

[root@docker ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth0"BOOTPROTO="static"ONBOOT="yes"STARTMODE="onboot"IPADDR=192.168.6.94PREFIX=24GATEWAY=192.168.6.181

服务器C的配置:

这里写图片描述


如果能ping通,但是通过浏览器上不了网,是由于mtu值不同导致需要设置mtu值的大小。

  • windows 操作系统中修改mtu值

    查询   
    输入:netsh interface ipv4 show subinterfaces 查询到目前系统的MTU值。   如果你查询不到你想要的连接,请看看是否已经禁用了某个本地连接。

    设置   
      
    netsh interface ipv4 set subinterface “本地连接” mtu=1480 store=persistent

  • Linux操作系统中mtu值的修改

方法一:# vi /etc/sysconfig/network-scripts/ifcfg-eth0#增加如下内容 MTU="9000"方法二:# echo "1460" > /sys/class/net/eth0/mtu

DNAT的设置:

服务器A上的设置:
将访问服务器A的8080端口转发给服务器C的80端口

[root@miner_k ~]# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.6.94:80

服务器C上的配置:

[root@docker ~]# yum -y install httpd[root@docker ~]# service httpd start[root@docker ~]# echo "web1" > /var/www/html/index.html

注意:
1.手动设置DNAT之后,数据的回包是使用NAT自动提供的SNAT。同理,手动设置SNAT,数据包的回复也是通过NAT自动提供的DNAT。
2.后端服务器是否需要指定网关到NAT的服务器

DNAT中后端服务器不需要将网关指定到NAT上
SNAT必须将网关指定到NAT上

在NAT服务器上做限制

经过NAT服务器时需要经过iptables的PREROUTING、FORWARD、POSTROUTING这三个链,可以在这些链上做限制。

1.中断NAT的地址转换

[root@miner_k ~]# iptables -P FORWARD DROP

2.允许后端服务器ping通外网
[root@miner_k ~]# iptables -I FORWARD -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT[root@miner_k ~]# iptables -I FORWARD -p icmp  -m state --state ESTABLISHED,RELATED -j ACCEPT
3.在允许后端服务器连接外网之后,禁止访问百度
[root@miner_k ~]# iptables -I FORWARD -m string --algo kmp --string "www.baidu.com" -j DROP

更多好玩的还有待发现,可以根据iptables的策略做限制。