🤖
BOKE
  • 😇一个博客
  • Group 1
    • 🚗ALL
      • 😁一文搞懂Yum命令:红帽系的包管理器
      • 😆到底什么是云计算
      • 😅反弹Shell大全与原理
      • 😂SHELL基础
      • 🤣iptables
      • ☺️阿里云YUM源
      • 😉CentOS系统版本升级
      • 🥲bat笔记
      • 😍ELK
      • 🥰黑马k8s
      • 😋supervisor
      • 🤨Bash 中的 ${} 和 $() 有什么区别
      • 🧐ansible+playbook
      • 👍给ELK的kibana设置密码
      • 😁prometheus
      • 😃Linux或Windows上实现端口映射
      • 😄shell脚本大全
      • 🤪linux修改网卡名
      • 😆Openvpn问题导致我掉了三根头发
      • 😅Iptables实现阿里云NAT网关效果
    • 🚕docker
      • 😇docker搭建MySQL主从
      • 😊docker命令
      • 🙂docker文件分层与数据挂载
      • 🙃dockerfile
      • 😘B站狂神-docker
    • 🚙DevOps
      • 😌DevOps(Git+Jenkins)
      • 😛python配置git
由 GitBook 提供支持
在本页
  • 一、什么是SNAT&DNAT
  • 1、SNAT
  • 2、DNAT
  • 二、配置iptables规则&网关&静态路由--DNAT(用于无网络的内网访问外网)
  • 1、系统ipv4转发配置 (在有公网IP的服务器上配置,我是在服务器B配置的)
  • 2、iptables规则设置 (在有公网IP的服务器上配置,我是在服务器B配置的)
  • 3、添加网关 (在有没有公网IP的服务器上配置,我是在服务器A配置的)
  • 4、设置阿里云VPC静态路由
  • 5、验证结果
  • 三、配置iptables规则--SNAT(用于用户通过公网IP访问内网服务器)
  • 1、在绑定公网的服务器配置iptables规则
  • 2、在无网络的内网服务器配置iptables规则

这有帮助吗?

  1. Group 1
  2. ALL

Iptables实现阿里云NAT网关效果

一、什么是SNAT&DNAT

SNAT(Source Network Address Translation)和DNAT(Destination Network Address Translation)都是iptables中的NAT(Network Address Translation)功能的一部分,用于在数据包进出防火墙时修改源和目标IP地址。

1、SNAT

SNAT用于修改数据包的源IP地址。当数据包从内部网络(私有网络)流向外部网络(公共网络/互联网)时,防火墙可以将数据包的源IP地址修改为防火墙的公网IP地址,使得目标服务器回复数据包时能够正确发送回防火墙,然后再由防火墙转发给内部网络的目标机器。

通常用于允许内部网络中的机器访问外部网络,同时隐藏内部网络的真实IP地址,实现IP地址的伪装。

2、DNAT

DNAT用于修改数据包的目标IP地址。当数据包从外部网络(公共网络/互联网)流向内部网络(私有网络)时,防火墙可以将数据包的目标IP地址修改为内部网络中某个具体机器的私有IP地址,从而确保数据包能够正确送达目标机器。

通常用于端口映射或服务器的负载均衡,将外部网络的访问请求转发给内部网络中的特定机器。

二、配置iptables规则&网关&静态路由--DNAT(用于无网络的内网访问外网)

实验环境为阿里云ECS

服务器A:内网网卡:eth0 内网IP:192.168.1.10 服务器B:内网网卡:eth0 内网IP:192.168.1.20 服务器B:外网网卡:eth1 外网IP:203.195.454.182

1、系统ipv4转发配置 (在有公网IP的服务器上配置,我是在服务器B配置的)

echo 1 > /proc/sys/net/ipv4/ip_forward

或者

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p

2、iptables规则设置 (在有公网IP的服务器上配置,我是在服务器B配置的)

如果没有iptables的话就先安装iptables

yum -y install iptables-services
systemctl start iptables
systemctl enable iptables

允许192.168.1.0/24网段通过B服务器上网

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

或者 指定允许某个ip通过B服务器上网

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.10 -j SNAT --to 203.195.45.182

保存iptables配置

iptables-save > /etc/sysconfig/iptables

3、添加网关 (在有没有公网IP的服务器上配置,我是在服务器A配置的)

需要将网关地址指向B服务器的私网ip

route add default gw 192.168.1.20

修改后查看路由,出现一下第一行的配置说明没问题了

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
> 192.168.1.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

到这一步还不行,还需要设置VPC路由表

4、设置阿里云VPC静态路由

5、验证结果

发现ping百度和yum源都是可以的,路由也没问题

三、配置iptables规则--SNAT(用于用户通过公网IP访问内网服务器)

1、在绑定公网的服务器配置iptables规则

iptables规则格式

iptables -t nat -A PREROUTING -p tcp -d <公网服务器内网IP> --dport <需要转发的端口> -j DNAT --to-destination <内网服务器IP地址>:<代理到内网服务器的端口>

例:将B服务器的122端口代理到A服务器的22端口用于ssh登录

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.20 --dport 122 -j DNAT --to-destination 192.168.1.10:22

2、在无网络的内网服务器配置iptables规则

iptables规则格式

iptables -t nat -A POSTROUTING -p tcp -d <公网服务器内网IP> --dport <代理到本机的端口> -j SNAT --to-source <本机IP地址>

例:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.20 --dport 22 -j SNAT --to-source 192.168.1.10
上一页Openvpn问题导致我掉了三根头发下一页docker

这有帮助吗?

image.png
image.png
image.png
🚗
😅