简介

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

服务器实现端口转发的N种方式的更多相关文章

  1. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  2. linux服务器之间传输文件的四种方式

    linux文件传输在内网渗透中至关重要,所以我在此总结一下几种Linux服务器之间传输文件的四种方式 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法]scp就是se ...

  3. HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式

    1 用户IP 识别  haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令: balance source 配置实例: backe ...

  4. Nginx负载均衡服务器实现会话粘贴的几种方式

    1. 使用Nginx 的ip_hash作为负载均衡服务并支持Session sticky 2. 使用nginx sticky第三方模块实现基于cookie的负载均衡 3.使用nginx的map指令根据 ...

  5. SSH25个命令 + 深入SSH端口转发细节

    OpenSSH是SSH连接工具的免费版本.telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃 ...

  6. SSH隧道:端口转发功能详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...

  7. TCP端口转发(centos7)

    =============================================== 2019/2/14_第1次修改                       ccb_warlock == ...

  8. Python的Asyncore异步Socket模块及实现端口转发的例子

    Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...

  9. SSH 内网端口转发实战

    导读 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人. 如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧 ...

  10. Linux SSH端口转发

    SSH端口转发分为两种,一种是本地端口转发,又称为本地SSH隧道.一直是远程端口转发.SSH端口转发,还必须指定数据传送的目标主机,从而形成点对点的端口转发. 本地端口转发     假定有三台主机A. ...

随机推荐

  1. 解决Z490-A吹雪安装macOS Monterey随机重启

    1.目前发现随机重启问题是板载网卡I225-v导致,需要去除以往的网卡的kext补丁: 2.去除补丁后发现网络连接识别成功,但是无法上网:这是因为网卡ID注入错误.需要将网卡ID设置为:F315868 ...

  2. Spring Boot中开启Spring Security

    Spring Boot中开启Spring Security Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shi ...

  3. CF1272 C Yet Another Broken Keyboard 题解+代码比对

    C. Yet Another Broken Keyboard time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  4. JMeter控制器遍历一组数据

    1.获取数据列表,通过JSON提取器提取所有name信息 获取到的name总条数 = name_matchNr = 4 2.通过添加控制器遍历一组数据 2.1 方式一:添加循环控制器 循环控制次数为 ...

  5. MacOS使用iTerm2 tab不区分大小写解答

    打开控制台 输入 vim ~/.zshrc 按下 i 之后  // i == insert插入字符 粘贴以下代码 复制到该文件中 autoload -Uz compinit && co ...

  6. RabbitMq安装配置启动

    RabbitMq安装配置启动 一:安装材料 请前往官方地址下载 Erlang: https://www.erlang.org/downloads rabbitmq: https://www.rabbi ...

  7. CF1408

    CF1408 那个博客搭好遥遥无期. A: 直接做就行了,我没智力还写 \(dp\) . #include<bits/stdc++.h> using namespace std; #def ...

  8. RKO队——冲刺随笔(5)

    这个作业属于哪个课程 至诚软工实践F班 这个作业要求在哪里 第五次团队作业:项目冲刺 这个作业的目标 记录冲刺计划.要求包括当天会议照片.会议内容以及项目燃尽图(项目进度) 1.昨日进展 小程序大致完 ...

  9. VUE项目中检测网页滑动注意事项

    一.this.$nextTick(function () {             window.addEventListener('scroll', this.onScroll, true)   ...

  10. IM系统功能简版图(v0.1)持续更新