【让云服务器更灵活】iptables转发tcp/udp端口请求

这篇具有很好参考价值的文章主要介绍了【让云服务器更灵活】iptables转发tcp/udp端口请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

iptables转发tcp/udp端口请求

前言

路由转发是计算机网络中的一种重要概念,特别是在网络设备和系统之间。它涉及到如何处理和传递数据包,以及决定数据包应该发送到哪个网络设备或路由表中的哪条路径,iptables是本文主要应用的软件技术。12

本文主要介绍以下几个情况的配置:

  1. 本机端口转发到本机其它端口
  2. 本机端口转发到其它机器

本文所描述技术可以应用的几种场景:

  1. 本地服务器搭建samba共享文件夹,挂载到云服务器
  2. 本地服务器搭建gitlab服务器,挂载到云服务器
  3. 本地搭建的其它服务器挂载到云服务指定端口

一、路由转发涉及点

路由转发涉及到以下几个方面:

  • 路由表:这是网络中用于确定数据包应该发送到哪个物理网络或下一个路由器的表。路由表通常包含有关到达不同网络的目标地址的信息,例如下一跳路由器、路径权重等。
  • 数据包转发:当一个路由器收到一个数据包时,它会根据其路由表确定如何将该数据包发送到下一个路由器或目标网络。这可以通过直接将数据包发送到下一个路由器或通过另一个路由器(即链路)转发来实现。
  • 数据包过滤:路由器通常还具有过滤机制,用于确定哪些数据包应该被转发到下一个路由器,哪些应该被丢弃或被拒绝。这可能涉及到诸如防火墙规则、病毒防护或访问控制列表等安全功能。
    路由转发的过程通常由路由器硬件和软件协同完成,并且受到网络拓扑、路由协议(如静态路由、动态路由等)以及网络流量等因素的影响。

路由转发是计算机网络中网络设备之间传递数据包的关键过程,它涉及到如何确定数据包的下一跳位置以及如何处理和传递数据包以到达最终目的地。

二、转发如何配置

测试网站:3

docker run --rm --name web1 --publish 8080:8080 nigelpoulton/web

修改/etc/sysctl.conf文件,让包转发功能在系统启动时自动生效:

# 启动当前设备的包转发功能,增加下边这句
net.ipv4.ip_forward = 1

使用sudo sysctl -p应用修改

【让云服务器更灵活】iptables转发tcp/udp端口请求,服务器,tcp/ip,udp

本机端口转发到本机其它端口

将网内其它设备访问本IP的 9000 端口转发到 8080端口,同网段内其它设备可以通过9000端口访问服务。

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 9000 -j REDIRECT --to-port 8080

$ curl 192.168.1.66:9000
# Out put
<html><head><title>Docker Rocks</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/></head><body><div class="container"><div class="jumbotron"><h1>Hello Docker learners!!!</h1><p>Be careful. The last time I updated the packages in this app was April 2020.</p><p> </p></div></div></body></html>

将本机访问本机的 9000 端口转发到 8080端口,本机可以通过 9000端口访问服务。

sudo iptables -t nat -A OUTPUT -p tcp --dport 9000 -j REDIRECT --to-port 8080

curl 192.168.1.66:9000
# Out put
<html><head><title>Docker Rocks</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/></head><body><div class="container"><div class="jumbotron"><h1>Hello Docker learners!!!</h1><p>Be careful. The last time I updated the packages in this app was April 2020.</p><p> </p></div></div></body></html>

【让云服务器更灵活】iptables转发tcp/udp端口请求,服务器,tcp/ip,udp

修改后的路由表如下:

$ sudo iptables -t nat -nL --line
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9000 redir ports 8080

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9000 redir ports 8080

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
2    MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:8080

Chain DOCKER (2 references)
num  target     prot opt source               destination         
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
2    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:8080

本机端口转发到其它机器

将网内其它设备访问本IP的 9000 端口转发到另一台机器的 8080端口,同网段内其它设备可以通过9000端口访问服务。

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.66:8080
$ sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.66 --dport 8080 -j SNAT --to-source 192.168.1.85

# 如果配置上述两个后还是上不了网,请检查filter FORWARD表
$ sudo iptables -nvL
# Out put,这里可以看到默认配置是丢弃
Chain FORWARD (policy DROP 813 packets, 42988 bytes)

# 修改对应网卡为接受
$ ip a
# Out put, 这里看到对应网卡为enp1s0
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ec:d6:8a:fa:c2:91 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.85/24 brd 192.168.1.255 scope global dynamic noprefixroute enp1s0
       valid_lft 65632sec preferred_lft 65632sec

$ sudo iptables -A FORWARD -o enp1s0 -j ACCEPT

【让云服务器更灵活】iptables转发tcp/udp端口请求,服务器,tcp/ip,udp

修改后的路由表如下:

$ sudo iptables -t nat -nL --line
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:192.168.1.66:8080

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    SNAT       tcp  --  0.0.0.0/0            192.168.1.66         tcp dpt:8080 to:192.168.1.85
$ sudo iptables -t filter -nvL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 813 packets, 42988 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       52  5506 ACCEPT     all  --  *      enp1s0  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination 

三、固化iptables

这里只记录一种比较简单的方式,还有其它方式可以自行搜索。

$ sudo apt-get install iptables-persistent


/etc/iptables$ tree -f
# 打印输出,可以看到这里多了一个/etc/iptables的文件夹
.
├── ./rules.v4
└── ./rules.v6

如果需要更新调用下边的命令:

# 保存ipv4路由信息
$ sudo iptables-save -f /etc/iptables/rules.v4

# 保存ipv6路由信息
$ sudo ip6tables-save -f /etc/iptables/rules.v6

如果需要重启恢复初始路由或卸载,使用下边命令:

$ sudo apt-get remove iptables-persistent
$ sudo rm -rf /etc/iptables/

总结

如果是云服务器,对应上述情况建立ip转发即可,例如samba转发tcp 445 139端口,udp 137 138端口,通过iptables -p参数切换udp/tcp。4567


  1. debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动) ↩︎

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

  3. 如何建立并使用docker ↩︎

  4. Linux iptables 防火墙软件命令详解 ↩︎

  5. 在Linux上打开端口 ↩︎

  6. linux查看服务器开放的端口和启用的端口五种方式 ↩︎

  7. 利用iptables实现端口转发 ↩︎文章来源地址https://www.toymoban.com/news/detail-771319.html

到了这里,关于【让云服务器更灵活】iptables转发tcp/udp端口请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux服务器上使用frp实现tcp端口转发--以访问内网mysql为例

    前言 最近在部署测试环境 部署服务器上没有公网地址和端口 无法使用navicat等工具对数据库操作 因此需要内网穿透或tcp端口转发来实现 公网服务器作为服务器端frps 内网服务器作为客户端frpc 服务端和客户端均下载相应的包 没开端口的自行开启相应端口 开启7000端口如下 1

    2024年02月16日
    浏览(54)
  • iperf3测试服务器tcp带宽udp丢包率

    要使用 iperf 测试网络的性能,您需要两台计算机,一台作为服务器,一台作为客户端,这将帮助您测试两台主机之间的网段。特别注意的是两台计算机的网口一定是同样的网口,测试的数据才是准确的,我之前测试的时候服务器端网口是万兆的,客户端用的是千兆的,所以测

    2024年02月12日
    浏览(46)
  • 【云服务器】关于UDP/TCP跨平台网络通信服务器无响应的情况及解决办法

    本篇文章仅为了记录我在跨平台进行udp通信的时候遇到的问题及解决办法 进行udp网络通信的时候,我用腾讯云服务器作服务端,windows本机作客户端,在进行连接的时候,当我在客户端向服务端发送消息的时候,服务器端接收不到消息(安全组已经配置) 当执行上述命令出现

    2024年02月10日
    浏览(44)
  • 使用Netty构建TCP和UDP服务器和客户端

    Netty是一个基于Java NIO实现的网络通信框架,提供了高性能、低延迟的网络通信能力。使用Netty构建TCP和UDP服务器和客户端非常简单,下面是一个简单的示例代码: 构建TCP服务器 构建TCP客户端 构建UDP服务器 构建UDP客户端   上述示例代码中,分别定义了一个TCP服务器、TCP客户

    2024年02月16日
    浏览(49)
  • JavaEE & UDP简易翻译服务器 & 网络编程示例2 & TCP回显服务器,回显客户端

    禁止白嫖 T T 点点赞呗 这个翻译器主要是在上一章的回显服务器和回显客户端上进行修改 修改了计算响应的过程, 即process方法 1.1 重写方法 重写方法是Java中的一种重要手段 指在一个类的子类里,对父类的一个方法进行重新定义! 而父类的权限级别要大于等于子类~ 【除了

    2023年04月16日
    浏览(60)
  • Linux C/C++ 多线程TCP/UDP服务器 (监控系统状态)

    Linux环境中实现并发TCP/IP服务器。多线程在解决方案中提供了并发性。由于并发性,它允许多个客户端同时连接到服务器并与服务器交互。 Linux多线程编程概述 许多应用程序同时处理多项杂务。服务器应用程序处理并发客户端;交互式应用程序通常在处理后台计算时处理用户

    2024年02月07日
    浏览(42)
  • 《TCP/IP网络编程》阅读笔记--基于UDP的服务器端/客户端

    目录 1--TCP和UDP的主要区别 2--基于 UDP 的数据 I/O 函数 3--基于 UDP 的回声服务器端/客户端 4--UDP客户端Socket的地址分配 5--UDP存在数据边界 6--UDP已连接与未连接的设置 ① TCP 提供的是可靠数据传输服务,而 UDP 提供的是不可靠数据传输服务; ② UDP 在结构上比 TCP 更简洁,其不会

    2024年02月09日
    浏览(61)
  • UE5 独立程序的网络TCP/UDP服务器与客户端基础流程

    引擎源码版,复制EngineSourcePrograms路径下的BlankProgram空项目示例。 重命名BlankProgram,例如CustomTcpProgram,并修改项目名称。  修改.Build.cs内容 修改Target.cs内容     修改Private文件夹内.h.cpp文件名并修改.cpp内容 刷新引擎 在项目.Build.cs中加入模块  .cpp 客户端.cpp 未完待续。。

    2024年01月17日
    浏览(60)
  • Nginx代理服务器、HTTP调度、TCP/UDP调度、Nginx优化、HTTP错误代码、状态页面、压力测试

    Top 案例1:Nginx反向代理 案例2:Nginx的TCP/UDP调度器 案例3:Nginx常见问题处理 1.1 问题 使用Nginx实现Web反向代理功能,实现如下功能: 后端Web服务器两台,可以使用httpd实现 Nginx采用轮询的方式调用后端Web服务器 两台Web服务器的权重要求设置为不同的值 最大失败次数为2,失败

    2024年01月21日
    浏览(47)
  • IPtables服务器配置与管理

    查看iptables服务 查看和删除iptables规则 设置iptables的策略及规则 iptables 包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的 Hook 点来区分的,表和链实际上是netilter的两个维度。4个表:flter,nat,mangle,raw,默认表是 filter(没有指定表的时候就是filter表)。表的

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包