Linux端口转发

linux下通常我们使用iptables来实现端口转发,需要了解DNAT和SNAT的原理,比较繁琐;而利用Rinetd工具就可以轻易实现,并且可以生成log方便检查,下面我们就来介绍下。

Rinetd

简介
Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外的负担。

安装

[root@test root]# cd /usr/local/src
[root@test src]# wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
[root@test src]# tar -zxvf rinetd.tar.gz
[root@test src]# cd rinetd
[root@test rinetd]# make
cc -DLINUX -g   -c -o rinetd.o rinetd.c
rinetd.c:176: warning: conflicting types for built-in function ‘log’
cc -DLINUX -g   -c -o match.o match.c
gcc rinetd.o match.o -o rinetd
[root@test rinetd]# make install
install -m 700 rinetd /usr/sbin
install -m 644 rinetd.8 /usr/man/man8
install: cannot create regular file `/usr/man/man8': No such file or directory
make: *** [install] Error 1

安装提示没有相关目录,我们创建/usr/man/man8,继续安装

[root@test rinetd]# mkdir -p /usr/man/man8
[root@test rinetd]# make install
cc -DLINUX -g   -c -o rinetd.o rinetd.c
rinetd.c:176: warning: conflicting types for built-in function ‘log’
gcc rinetd.o match.o -o rinetd
install -m 700 rinetd /usr/sbin
install -m 644 rinetd.8 /usr/man/man8

ok,安装完成。

配置
我们需要手动创建Rinetd的配置文件,如/etc/rinetd.conf,主要配置如下:

  1. bindaddress bindport connectaddress connectport
  2. ALLOW AND DENY RULES
    allow 206.125.69.*
  3. logfile log-file-location
    logcommon(common log format)
    具体配置项请查看/usr/man/man8/rinetd.8内容。
    具体实例如下:
[root@test src]# cat /etc/rinetd.conf 
logfile /var/log/rinetd.log
logcommon
0.0.0.0 80 10.10.10.8 80

上述配置文件表示将访问本机80端口的数据转发到后端10.10.10.8的80端口上。

启动
[root@test rinetd]# rinetd -c /etc/rinetd.conf

注意:
1. rinetd.conf中绑定的本机端口必须没有被其他程序占用
2. 运行rinetd的防火墙应该打开绑定的本机端口,如80

至此,我们的端口转发程序就配好了,就是这么简单。

iptables

例如:需要将外网访问本地IP(10.10.10.59)的80端口转换为访问10.10.10.8的80端口
iptables需要配置DNAT和SNAT,如下:

#将外网访问10.10.10.59:80端口转发到10.10.10.8:80端口上
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.10.10.59 --dport 80 -j DNAT --to 10.10.10.8:80
#10.10.10.8:80端口将数据返回给客户端时,将源ip更改为10.10.10.59
/sbin/iptables -t nat -A POSTROUTING -o eth0 -p tcp -d 10.10.10.8 --dport 80 -j SNAT --to 10.10.10.59

整个访问过程ip变化是这样的:

  1. x.x.x.x:* —>10.10.10.59:80 经过iptables的prerouting链匹配DNAT进行目的地址转换,目的地址改为:10.10.10.8:80 ,ip包变为 x.x.x.x:* —> 10.10.10.8:80。
    从此ip包看出web请求虽然转发到10.10.10.8上,由于10.10.10.8无法上外网,因此ip包无法返回。

  2. x.x.x.x:* —> 10.10.10.8:80 然后又经过postrouting链匹配SNAT进行源地址转换,源地址改为:10.10.10.59,ip包变成10.10.10.59 —> 10.10.10.8:80
    由于ip包进行了源ip转换,转发到10.10.10.8上的包在返回时,将数据先发到10.10.10.59,然后再通过10.10.10.59返回给客户端,从而形成了一个完整的链路。

备注
以上转发是转发到另一台机器上,若要本机端口做转发,我们需要用到DNAT的REDIRECT。
例如:需要将外网访问本地IP(10.10.10.59)的80端口转换为访问本机的8080端口

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.10.10.59 --dport 80 -j REDIRECT --to-ports 8080
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,有多种方法可以进行端口转发。其中一种方法是使用SSH进行端口转发。SSH提供了一个功能强大的端口转发功能,可以通过SSH连接来转发其他TCP端口的网络数据,并提供加密和解密服务。 一种常见的SSH端口转发方法是本地端口转发。您可以使用以下命令将本地端口转发到远程主机的特定端口: ``` ssh -fgN -L <本地端口>:<目标主机>:<目标端口> <远程主机> ``` 例如,要将本地端口2222转发到本地主机的22端口(即本地SSH服务),可以使用以下命令: ``` ssh -fgN -L 2222:localhost:22 localhost ``` 另一种常见的SSH端口转发方法是远程端口转发。您可以使用以下命令将远程端口转发到本地主机的特定端口: ``` ssh -fgN -R <远程端口>:<目标主机>:<目标端口> <远程主机> ``` 例如,要将远程端口2222转发到主机host1的22端口,可以使用以下命令: ``` ssh -fgN -R 2222:host1:22 localhost ``` 此外,还有一种动态转发的方法,可以创建一个动态的本地Socks代理服务器。您可以使用以下命令进行动态转发: ``` ssh -fgN -D <本地Socks代理端口> <用户名@远程主机> ``` 例如,要创建一个动态的本地Socks代理服务器,可以使用以下命令: ``` ssh -fgN -D 12345 root@host1 ``` 除了使用SSH进行端口转发外,还可以使用iptables命令进行端口转发iptablesLinux系统中的一个强大的防火墙工具,同时也可以用于端口转发。 综上所述,Linux系统中有多种方法可以进行端口转发,包括使用SSH进行本地端口转发、远程端口转发和动态转发,以及使用iptables进行端口转发。具体使用哪种方法取决于您的需求和环境。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux 下最简单快捷的端口转发软件 redir 简介](https://blog.csdn.net/learndiary/article/details/122685551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux端口转发的几种常用方法](https://blog.csdn.net/Jailman/article/details/125524313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值