iptables配置NAT实现端口转发与ss命令的讲解

目录

iptables之路由 路由表 转发

iptables 端口转发

1、将本地的端口转发到本机端口

2、将本机的端口转发到其他机器

3、将一台公网 ip 主机的端口转发到另一台公网 ip 主机

ss命令:查看服务是否启动 


iptables之路由 路由表 转发

1.路由表
路由表在Linux中 ⾸先是⼀张 可见的 可更改的表, 它的作⽤ 就是当数据包发到Linux的时 候 , 系统(或者说内核)就根据这张表中定义好的信息 来决定这个数据包接下来该怎么⾛
重要知识点:在Linux当中 只要有网络传输的发生 就⼀定会跟路由表有最直接的联系

2.路由功能和路由器
有了路由表之后,Linux就可以遵循这个表中的路由信息,决定数据的流向了,不过数据包最终跨网段的时候,必须借助网关设备才能到达其它网络

3.网关设备
⽹关设备:是⽤于连接两个不同⽹络的媒介, 可以是⼀个硬件的路由器 (我们平时家⾥⽤ 的那种 ⼩路由器 就是这个功能)也可以是⼀个开启了 路由功能的 Linux主机
⼀个开启了路由功能的Linux 就可以作为⼀个 ⽹关设备使⽤

iptables配置NAT实现端口转发与ss命令的讲解_第1张图片

4.转发
如何开启转化?

使能数据转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward    ##查看cat /proc/sys/net/ipv4/ip_forward
禁⽌止数据转发功能:
echo 0 > /proc/sys/net/ipv4/ip_forward

Linux开启了转化功能后,其实起到了两种功效?

Linux本身可以转发数据包,自身就会形成了一个小路由器,可以充当网关来使用
Linux开启了数据包转发功能,iptables的NAT表才可以正常使用

————————————————
原文链接:https://blog.csdn.net/weixin_43443216/article/details/116500414

###############NAT 网络地址转换的原理及功能,实现局域网访问互联#################

网络地址转换 NAT(Network Address Translation),被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。原因很简单,NAT 不仅完美地解决了 IP 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。默认情况下,内部 IP 地址是无法被路由到外网的,内部主机 10.1.1.1 要与外部 Internet通信,IP 包到达 NAT 路由器时,IP 包头的源地址 10.1.1.1 被替换成一个合法的外网 IP,并在 NAT 转发表中保存这条记录。当外部主机发送一个应答到内网时,NAT 路由器收到后,查看当前 NAT 转换表,用 10.1.1.1 替换掉这个外网地址。NAT 将网络划分为内部网络和外部网络两部分,局域网主机利用 NAT 访问网络时,是将局域网内部的本地地址转换为全局地址(互联网合法的 IP 地址)后转发数据包;

NAT 分为两种类型:NAT(网络地址转换)和 NAPT(网络端口地址转换 IP 地址对应一个全局地址)。
静态 NAT:实现内部地址与外部地址一对一的映射。现实中,一般都用于服务器;
动态 NAT:定义一个地址池,自动映射,也是一对一的。现实中,用得比较少;
NAPT:使用不同的端口来映射多个内网 IP 地址到一个指定的外网 IP 地址,多对一。

#############################################################################

iptables 端口转发

 iptables 的端口转发则是在内核进行。

1、将本地的端口转发到本机端口

将本机的 7777 端口转发到 6666 端口。

iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666

1.242 机器上将 7777 端口转发到 6666,并侦听 6666 端口。
1.237 机器上连接 1.242 的 7777 端口,虽然 1.242 的 7777 端口并未被侦听,但是被转发给了处于侦听状态的 6666 端口。

 1.237 上查看连接信息

1.242 上查看连接信息

 注意 1.242 查查看到的连接信息中,本端端口是转发之后的端口 6666,而不是 7777.

删除该端口转发:

查看当前iptables 的 nat 表的所有规则:(不用 -t 指定表名默认的是指 filter 表)

iptables -t nat -nL --line

删除指定表的指定链上的规则, -D 并指定序号即可。

iptables -t nat -D PREROUTING 1

*说明:PREROUTING链修改的是从外部连接过来时的转发,如果本机连接到本机的转发,需要修改 OUTPUT链。 #####同一台电脑下的虚拟机之间访问用REDIRECT,这里的本机指的是同一个操作系统(ip)下,因为使用lo网卡的时候,是没有PREROUTING这个阶段的,如果一定要在本地(即127.0.0.1)进行NAT的验证,可以添加:

iptables -t nat -A OUTPUT -p tcp --dport 7777 -j REDIRECT --to-port 6666

此命令是设置了,lo网卡的数据包的目的端口是7777的时候,转发到6666端口去。使用的是OUTPUT,因此从外部访问7777端口的话,不会转发的6666端口去,一定要是本地访问本地的时候才行。

[root@master ~]# iptables -t nat -A OUTPUT -p tcp --dport 7776 -j REDIRECT --to-port 80
[root@master ~]# curl localhost:80



Welcome to nginx!