admin管理员组

文章数量:1571135

一、项目背景描述

  实际运维工作中,很多机器是不带公网的,一般一个集群或一个平台只有前端能访问互联网,划属于DMZ区域,而内网机器一些因安全所进行的升级,如果采用手动离线升级的话,效率低,而且比如内核升级的话,因个人能力或系统未知原因,还会出现意外的问题。那我们如何借助于DMZ去的linux主机,让其具备路由转发功能(路由),从而实现内网机器外访互联网呢?

二、实现方法

  我们知道,Linux本身自带iptables包过滤,但是其还有一重要功能,即实现数据的转发,本文就利用Linux 自带 iptables 实现从一个网络接口到另一个接口的IP转发(数据包转发)。IP转发的概念是,使 Linux 机器像路由器一样将数据从一个网络发送到另一个网络。所以,它能作为一个路由器或者代理服务器,实现将一个连接的互联网或者网络连接共享给多个客户端机器。

● 示例及原理解释(来源网络):

源IP 源端口 NAT 网关机器IP NAT 网关 机器端口 目标IP 目标端口
192.168.10.14 8080 192.168.10.15 18080 106.11.45.35 80

转发过程如下:

  1. 192.168.10.14:8080 [request dysmsapi.aliyuncs] --> 192.168.10.15:18080
  2. 192.168.128.145:18080 [request dysmsapi.aliyuncs] --> dysmsapi.aliyuncs (106.11.211.236:80)
  3. dysmsapi.aliyuncs [response] --> 192.168.10.14:18080
  4. 查找映射表得知,18080获得的数据返还给 192.168.10.14:8080
  5. dysmsapi.aliyuncs [response] --> 192.168.10.140:8080

2.1、启用 IPv4 转发

带外主机上配置,使用root或sudo执行:

cat /proc/sys/net/ipv4/ip_forward
sysctl -a |grep 'net.ipv4.ip_forward'  //查看是否已经打开,如值为1,则已经打开
echo 1 > /proc/sys/net/ipv4/ip_forward   //开启ipv4转发,或修改配置文件/etc/sysctl.conf
vim /etc/sysctl.conf  //修改参数为1
net.ipv4.ip_forward = 1

#立即生效
sysctl -p

注:执行命令后可马上启用ip转发,但仅对本次登录有效;要想永久生效需要修改配置文件/etc/sysctl.conf ,增加/修改 net.ipv4.ip_forward = 1。


修改后执行:# sysctl -p /etc/sysctl.conf ##启用更改,使其立即生效。

2.2、内网主机配置静态路由转发到公网

本次项目中使用eth0网口的网关配置静态路由转发到公网,来实现连接外网,编辑配置文件:

vi /etc/sysconfig/static-routes

格式如下:any net 172.16.152.0/24 gw 10.102.3.254
其中:
net 172.16.152.0/24 ----->目标网段,即你需要访问的公网网段
gw 10.102.3.254 -------->本地nat代理的网关(前提是开启了本地ipv4转发)

修改配置后需要重启网卡或主机,才能生效;

2.3、带外主机配置,如你本地有1块上网的网卡:

  配置iptables,且由于netfilter/iptables是一个无状态的防火墙,我们需要让 iptables 允许已建立的连接通过。

iptables -A FORWARD -i 内网口 -o 外网口 -j ACCEPT
iptables -A FORWARD -i 外网口 -o 内网口 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.10.14 -j SNAT --to 192.168.10.15  #或直接如下配置
iptables -t nat -A POSTROUTING -o 外网口 -j MASQUERADE
iptabl

本文标签: 公网连接到内网Linuxip