服务器实现端口转发的N种方式

yizhihongxing

简介

在一些实际的场景里,我们需要通过利用一些端口转发工具,比如系统自带的命令行工具或第三方小软件,来绕过网络访问限制触及目标系统。下文为大家总结了linux系统和windows系统端口转发常用的一些方法。

注:Linux实现端口转发需要内核支持,请确保内核参数net.ipv4.ip_forward值为1

一、采用iptables实现

iptables是一个功能丰富的Linux防火墙工具,可以用于配置网络地址转换(NAT)规则,从而实现端口转发。

# 端口映射规则
iptables -t nat -A PREROUTING -p tcp --dport [目标端口] -j DNAT --to-destination [映射地址]:[映射端口]
iptables -t nat -A POSTROUTING -p tcp -d [映射地址] --dport [映射端口] -j SNAT --to-source [本地地址]

# 案例:将远程主机 192.168.1.101 的 80 端口映射到本地的 8080 端口,输入以下命令
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.101:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.101 --dport 80 -j SNAT --to-source [本地IP]
# 注意要将 [本地IP] 替换为本地 IP 地址。

# 查看转发规则
iptables -t nat --list --line-number

参数说明

  • -t nat:指定转换表(nat 表);
  • -A PREROUTING:指定要添加到哪个链中;
  • -p tcp :指定协议为 TCP;
  • --dport [目标端口]:指定需要映射到的目标端口;
  • -j DNAT:指定使用目标地址转换;
  • --to-destination [映射地址]:[映射端口]:指定目标地址和端口;
  • -A POSTROUTING:指定要添加到哪个链中;
  • -d [映射地址]:指定目标地址;
  • --dport [映射端口]:指定目标端口;
  • -j SNAT:指定使用 源地址转换;
  • --to-source [本地地址]:指定本地地址。

二、采用firewalld实现

firewalld是另一个功能强大的Linux防火墙工具,也可以用于配置网络地址转换(NAT)规则来实现端口转发。

# 规则
firewall-cmd --zone=public --add-forward-port=port=[本机端口]:proto=[协议]:toaddr=[远程主机IP]:toport=[远程主机端口] --permanent

# 案例:将192.168.1.10的80端口转发到本机的8080
firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.10:toport=80 --permanent
firewall-cmd --reload

# 查看已设置的规则
firewall-cmd --list-all

参数说明

  • --zone=public:指定了这条规则的生效区域是public
  • --add-forward-port:指定了添加一条端口转发规则,具体规则参数解释如下:
    • port:需要转发的端口
    • proto:协议类型,支持tcp、udp、icmp
    • toport:目标端口
    • toaddr:可选参数,转发到指定IP地址

三、采用ssh隧道实现

利用SSH为TCP链接提供的隧道功能实现端口转发。
# 规则
ssh -N -L [远程端口]:[本地地址]:[本地端口] root@[远程地址]

# 案例:将服务器 172.20.150.199 上的 8000 端口映射到本地的 8888 端口
ssh -N -L 8000:localhost:8888 root@172.20.148.199

更多高级用法可访问 https://www.lixueduan.com/posts/linux/07-ssh-tunnel/

四、采用nc实现

NC(也称作Netcat)是一个类Unix操作系统中的网络工具,有着强大的端口转发功能。

# 格式
nc -lp [本地映射端口] -c "nc [远程主机地址] [远程主机端口]"

# 案例:将192.168.1.110的3306映射到本机的3000端口
nc -lp 3000 -c "nc 192.168.1.110 3306"

五、采用ncat实现 

ncat是一个多功能网络工具,可用于端口转发。它是nc(netcat)的升级版本。

# 规则
ncat --sh-exec "ncat [远程主机地址] [远程主机端口]" -l [本地映射端口]  --keep-open

# 案例:将10.100.39.144的80端口转发到本地8000
ncat --sh-exec "ncat 10.100.39.144 80" -l 8000 --keep-open

六、采用socat实现

socat是一款非常强大的网络工具,在实现端口映射时,可以用它来建立TCP连接,将本地端口映射到远程机器上的一个端口。下面是使用socat实现端口映射的步骤:

# 规则
socat TCP-LISTEN:[本地映射端口],reuseaddr,fork TCP:[远程主机地址]:[远程主机端口]

# 案例: 将192.168.199.236的22端口,映射到本机的7777端口
socat TCP-LISTEN:7777,reuseaddr,fork TCP:192.168.199.236:22

七、Windows系统使用netsh实现

在 Windows 操作系统中,可以使用 netsh 命令实现网络端口转发。以下是使用 netsh 实现端口转发的步骤:

# 端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=10.100.38.14 connectport=80
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=10.100.38.14 connectport=443

# 展示
netsh interface portproxy show v4tov4
侦听 ipv4:                 连接到 ipv4:

地址            端口        地址            端口
--------------- ----------  --------------- ----------
0.0.0.0         80          10.100.38.14    80
0.0.0.0         443         10.100.38.14    443

# 删除
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=80

 

原文链接:https://www.cnblogs.com/wubolive/p/17306466.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:服务器实现端口转发的N种方式 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • Linux 学习笔记之超详细基础linux命令 Part 10

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ———————————接Part 9—————————— find命令 方法:find[路径][选项]表达式 说明:从指定路径开始向下搜素满足表达式的文件或目录,不指定目录路径时查找当前目录…

    Linux 2023年4月11日
    00
  • Linux cupsreject命令

    Linux cupsreject命令是CUPS(通用Unix打印系统) 提供的一个命令行工具。其作用是用来拒绝或重新启用打印请求,也可以用于查看拒绝的打印请求的状态。以下是该命令的使用方法和示例说明: 命令格式 cupsreject [ -h server ] job-id(s) 其中:- -h server 参数用于指定CUPS服务器的主机名或IP地址;-…

    Linux 2023年3月28日
    00
  • Linux命令之lz4命令如何使用

    本篇内容主要讲解“Linux命令之lz4命令如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux命令之lz4命令如何使用”吧! 一、lz4命令简介 LZ4是一种压缩格式,特点是压缩/解压缩速度超快(压缩率不如gzip),如果你特别在意压缩速度,或者当前环境的CPU资源紧缺,可以考虑这种格式。lz4是一…

    Linux 2023年4月10日
    00
  • Linux6.7卸载系统自带的mysql-libs* crontab命令不能用了原因分析

    Linux6.7卸载系统自带的mysql-libs 背景 在升级mysql的过程中,可能会遇到需要卸载系统自带的mysql-libs的情况。但是,在卸载过程中,会发现crontab命令不能使用,这是由于mysql-libs包被卸载后,系统的crontab命令需要加载mysql相关的动态链接库。 解决方案 1. 安装cronie 由于mysql-libs包被卸…

    Linux 2023年5月14日
    00
  • 如何在Linux系统上安装和配置CI/CD工具?

    下面是在Linux系统上安装和配置CI/CD工具的完整攻略,步骤如下: 1. 安装和配置 Git 首先,我们需要安装 Git,并配置 Git 的用户名和邮箱。Git 是版本控制工具,可以帮助我们管理我们的代码: sudo apt-get install git # 安装Git git config –global user.name "Your …

    Linux 2023年4月19日
    00
  • Linux系统上创建.NET6项目(通过命令行(CTL)方式)

    前言 平时大家创建项目基本上都是借助开发工具创建,比如visual studio,visual studio code,今天我们在Linux系统上,通过命令行的形式创建.NET6项目。 版本介绍 系统版本:Ubuntu22.04 SDK版本:.NET6 安装.NET环境 # 升级系统 sudo apt-get update # 找到.NET6 sudo ap…

    Linux 2023年5月11日
    00
  • 600 条最强 Linux 命令总结

    600 条最强 Linux 命令总结 每博一文案 你有千万条微博想写,可有些根本不重要,后来你才懂那是你怕别人看穿你所以才把真话埋在日常里。你有千万句话想说,可点开那 个对话框,你根本打不出一个字。你才明白,原来你从一开始就怕别人看穿,所以宁可孤独。所以你宁可每天嘻嘻哈哈,也不要被人看出来你真的难受过。只有在最深的夜里,你才能够允许自己难过。 不要改变你的热…

    Linux 2023年4月17日
    00
  • 虚拟机中centos修改时间的方法

    下面是虚拟机中CentOS修改时间的方法攻略,包括两条示例说明: 一、背景介绍 在虚拟机中运行CentOS系统时,由于硬件时钟与系统时钟不同步,可能会导致时间误差。在这种情况下,我们需要手动修改系统时间来同步硬件时钟。下面是具体做法。 二、修改时间的方法 1. 使用date命令修改时间 使用date命令可以很方便地修改系统时间,命令格式如下: date +%…

    Linux 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部