Linux中部署SNAT和DNAT

部署环境:

[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.conf
    net.ipv4.ip_forward = 1
    
    [root@miner_k ~]# sysctl -p
    net.ipv4.ip_forward = 1
    
  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
    
    或者可以指定特定的IP访问特定的网卡
    [root@miner_k ~]# iptables -t nat -I POSTROUTING -s 192.168.6.32/32 -j SNAT --to-source 192.168.6.181
  3. 查看防火墙上是否开启路由转发

    [root@snat ~]# iptables-save
    
    # Generated by iptables-save v1.4.7 on Sun Dec 17 20:22:38 2017
    
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [18979:1833160]
    ....... 省略
    -A FORWARD -j ACCEPT 
    

    如果没有开启forward或者是直接拒绝了需要增加一下规则

    [root@snat ~]# iptables -I FORWARD -j ACCEPT

服务器B的配置:

[root@docker ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
STARTMODE="onboot"
IPADDR=192.168.6.94
PREFIX=24
GATEWAY=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的策略做限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值