服务器实现端口转发的N种方式
简介
注: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、icmptoport:目标端口toaddr:可选参数,转发到指定IP地址
三、采用ssh隧道实现
# 规则
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种方式的更多相关文章
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- linux服务器之间传输文件的四种方式
linux文件传输在内网渗透中至关重要,所以我在此总结一下几种Linux服务器之间传输文件的四种方式 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法]scp就是se ...
- HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式
1 用户IP 识别 haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令: balance source 配置实例: backe ...
- Nginx负载均衡服务器实现会话粘贴的几种方式
1. 使用Nginx 的ip_hash作为负载均衡服务并支持Session sticky 2. 使用nginx sticky第三方模块实现基于cookie的负载均衡 3.使用nginx的map指令根据 ...
- SSH25个命令 + 深入SSH端口转发细节
OpenSSH是SSH连接工具的免费版本.telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃 ...
- SSH隧道:端口转发功能详解
SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...
- TCP端口转发(centos7)
=============================================== 2019/2/14_第1次修改 ccb_warlock == ...
- Python的Asyncore异步Socket模块及实现端口转发的例子
Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...
- SSH 内网端口转发实战
导读 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人. 如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧 ...
- Linux SSH端口转发
SSH端口转发分为两种,一种是本地端口转发,又称为本地SSH隧道.一直是远程端口转发.SSH端口转发,还必须指定数据传送的目标主机,从而形成点对点的端口转发. 本地端口转发 假定有三台主机A. ...
随机推荐
- Linux安装ODBC连接SQLServer数据库
操作系统:Centos7.2 1.下载ODBC安装包 unixODBC-2.3.9.tar.gz freetds-1.3.9.tar.gz 下载这两个压缩包的地址:ftp://ftp.freetds. ...
- 互联网架构 之备份服务器 rsync
备份服务器(Rsync) 1.介绍备份的场景 1.什么情况下需要备份 一般数据比较重要的情况下,数据如果丢失很容易找不回来了的,建议备份. 2.什么是备份 将原有的数据复制一份或几份存起来,以备不时之 ...
- NuGet国内镜像
NuGet国内镜像 https://nuget.cdn.azure.cn/v3/index.json
- mac安装mysql5.6默认密码修改
前言: 每次安装mysql都被烦的要死,痛并思痛记下此篇文章: 参考: https://blog.csdn.net/u010377383/article/details/82688250 https: ...
- 制作带curl命令的容器
创建一个容器,启动后使用curl命令请求指定的地址 方法一.固定的地址,创建Dockerfile前先修改entrypoint.sh里的地址 vi entrypoint.sh#! /bin/bashcu ...
- Oracle Fusion Middleware Introduction
Oracle Fusion Middleware Oracle Fusion Middleware is a comprehensive family of software products tha ...
- Java开发词汇
Java基础常见英语词汇(70个) OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 JDK:Java develop ...
- pwd学习
pwd学习 学习pwd命令 首先通过man命令去学习pwd man pwd pwd pwd --help getcwd():getcwd(char *buf,size_t size) readdir( ...
- NX二次开发获取NX主程序路径
//头文件 #include <Windows.h> #include <iostream> #include <NXOpen/ListingWindow.hxx> ...
- WSL终端无法启动
WSL终端无法启动 1.状态 (1)宿主系统重新启动后,通过菜单项无法启动终端. (2)在powershell中,通过命令:wsl -l -v,查看子系统均为为stopped状态. (3)Powers ...