ubuntu端口映射

echo 1 >/proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp --dport 8000 -j DNAT --to-destination xxx.x.x.x:80
 

可以使用命令:iptables -t nat --list检查nat列表信息:
Nat列表信息删除:
iptables -t nat -D PREROUTING 1    //序号从1 开始,后边以此+1.

测试网络连接:

Server:

[crayon-5bf06608e9489229694814 inline="true" ]nc -lvp 4444
[/crayon]

Client:

[crayon-5bf06608e948e743310537 inline="true" ]nc -vv 192.168.111.102 8888
[/crayon]

Client连接成功

端口转发和端口映射有什么不同?实现端口映射的软件

花生壳|2018-10-18

端口转发

端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。

在网吧通过路由器或者代理连接到外网,而在内网建立和运行网络服务器或FTP服务器是没办法使外网用户直接访问的,通过在路由上的NAT开启建立相应端口转发的映射,你可以指示路由器转发对某一特定网端口(如80 ,为网络服务器或21为FTP服务器) 所有的信息为本地网络。 这意味着,如果一个外部主机试图通过HTTP访问外网的IP加相应端口,就可访问到相应的内网建立的服务器。 外部访问此服务器的用户并不知道服务器是处于内部网络上的。 这种方法被广泛应用于网吧或通过NAT共享上网在内网建立服务器的用户。公安监控系统即通过此方法来监控网吧数据的。

端口映射

端口映射是NAT的一种,功能是把在公网的地址转翻译成私有地址, 采用路由方式的ADSL宽带路由器拥有一个动态或固定的公网IP,ADSL直接接在HUB或交换机上,所有的电脑共享上网。

端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。端口映射有动态和静态之分。

通俗来讲,端口映射是将一台主机的内网(LAN)IP地址映射成一个公网(WAN)IP地址,当用户访问提供映射端口主机的某个端口时,服务器将请求转移到本地局域网内部提供这种特定服务的主机;利用端口映射功能还可以将一台外网IP地址机器的多个端口映射到内网不同机器上的不同端口。 端口映射功能还可以完成一些特定代理功能,比如代理POP,SMTP,TELNET等协议。理论上可以提供65535(总端口数)-1024(保留端口数)=64511个端口的映射。

端口映射和端口转发的区别

转发与映射,按理解意思,是用不同的方法实现同样的目标。

端口转发:你给我了,我打开看看,发现这上面标志显示是要给张三,那么我就给张三去。如果标志是给李四,那我就再给李四去。

端口映射:你放到我左手,我就直接给张三;你放到我右手,我就直接给李四。这中间我不管你放我手上的是什么东西。

转发的重点在“转”上面。送快递的过来,把所有快递都交给门口保安,保安再根据每件快递上的收件人来分发。映射,就是在大门口给每个人装个柜子,送快递的直接按收件人名字,把快递放到对应的柜子里面。

就是做端口映射的。端口映射对于不专来的人来说,可能很难懂。说白了就是你在你的本机做个网站,怎么才能让所有人都能访问呢?你可以通过做个端口映射,把你本地的80端口映射出去。因为你如果是拨号的话,本机IP地址是私网IP,在INTERNET上私网IP是不能直接被传输的。所以要有公网IP别人才能访问你的网站。你现在拨号,拨通后运营商就会给你分一个公网IP地址,这样别人就可以通过这个公网IP访问你的网站了。说的了就是别人访问你的网站,先通过访问路由器上的80端口。因为路由器上是不能做网站的,然后路由器再把这个请求传送到你本机。就是这样。实现一个端口的对接。

#以下为参考资料

打开转发开关
要让iptables的端口转发生效,首先需要打开转发开关
方法一:临时打开,重启后失效
$sudo su
#echo 1 >/proc/sys/net/ipv4/ip_forward

方法二:永久打开,重启依然有效
编辑/etc/sysctl.conf文件,将net.ipv4.ip_forward=1前面的#注释去掉,保存文件,然后执行sudo sysctl -p使其生效

典型使用场景举例
场景一:目标机的22端口外网没有打开,通过本地端口转发实现通过其他端口访问ssh的22端口
案例:125.69.67.213机器的22端口未对外开放,但开放了3000~4000之间的端口,因此通过3000端口转发到22实现ssh登录
sudo iptables -t nat -A PREROUTING -p tcp -i eth0 -d 125.69.67.213 --dport 3000 -j DNAT --to 125.69.67.213:22
这个属于本机端A端口转发到本机的B端口

场景二:将内网的22端口映射到外网的一个端口,实现SSH直接登录,不用跳转
案例:192.168.2.61为外网机,192.168.2.70为内网机,如果不做映射,需要先登录到61,再登录到70.做如下映射之后,可直接通过外网机的3003登录到内网机
sudo iptables -t nat -A PREROUTING -d 192.168.2.61 -p tcp --dport 3003 -j DNAT --to-destination 192.168.2.70:22
sudo iptables -t nat -A POSTROUTING -d 192.168.2.70 -p tcp --dport 22 -j SNAT --to 192.168.2.61
注:(1) 本例中也可以通过SecureCRT的自动登录实现。

场景三:在外网直接访问内网的MySQL数据库
案例:很多时候数据库在内网机,外网不能直接访问,但做运维的时候可能需要通过图形界面工具直接连上去。做端口映射就可以解决这个问题。例如:将外网机192.168.2.61的3001端口转发到内网机192.168.2.70的MySQL的3306端口
sudo iptables -t nat -A PREROUTING -d 192.168.2.61 -p tcp --dport 3001 -j DNAT --to-destination 192.168.2.70:3306
sudo iptables -t nat -A POSTROUTING -d 192.168.2.70 -p tcp --dport 3306 -j SNAT --to 192.168.2.61

iptables其他常见操作
查看当前iptables的所有规则
sudo iptables -L
或者
sudo iptables-save

iptables规则保存到文件
sudo sh -c "iptables-save > /etc/iptables.rules"

从文件恢复iptables的规则
sudo iptables-restore /etc/iptables.rules

开机启动加载iptables规则
注:配置的规则系统默认重启后就失效,因此做开机启动时加载iptables的配置也有必要。
在/etc/network/interfaces的末尾添加如下一行: 
pre-up iptables-restore < /etc/iptables.rules

如果想在关机的时候自动保存修改过的iptables规则,可添加如下行
post-down iptables-save > /etc/iptables.up.rules

参考资料:
1. https://help.ubuntu.com/community/IptablesHowTo
--------------------- 
作者:gobitan 
来源:CSDN 
原文:https://blog.csdn.net/gobitan/article/details/50696641 
版权声明:本文为博主原创文章,转载请附上博文链接!

发布了30 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/djfjkj52/article/details/89918912