端口转发:Rinetd简化虚拟化网络配置(另附:Windows系统端口转发)

目录

开场白

Rinetd简介

快速使用

转发规则

访问控制

注册systemd服务

日志管理

Windows上进行端口转发


开场白

虚拟化平台(libvirt+qemu-kvm、vmware、Hyper-V、VirtualBox等)将虚机接入网络的方式基本上就三种:Bridge、NAT、Host-Only。而默认的Virtual Network是NAT模式。

就目前的云平台而言,默认也是private network,然后通过绑定floating IP对外提供服务。

不管是Linux Bridge、openvswitch方式实现桥接,其配置都比默认网络增加了不少。而我们可以通过Rinetd工具实现网络转发,在默认Virtual Network的情况下,依然可以对外提服务访问。比如:将22、3389、8080等端口转发出去。

注意:经在生产环境上使用,高并发场景下rinetd性能差(rinetd 没有使用epoll,而是用了select),低并发场景或者测试环境下可以使用。优点:简单易用。

Rinetd简介

Rinetd 是一个 TCP 连接重定向工具,将TCP连接从一个IP:Port重定向到另一个(UDP应该不行[未验证])。rinetd是一个单进程服务,它可以处理到地址/端口对的任意数量的连接。这些address/port pairs通过/etc/rinetd.conf文件指定。由于rinetd使用非阻塞I/O作为单个进程运行,因此它能够重定向大量连接,而不会对计算机造成严重影响。

NOTE:Rinetd 不能用于重定向 FTP 服务,因为 FTP 服务使用了多个 socket 进行通讯。

快速使用

wget http://www.rinetd.com/download/rinetd.tar.gz

2020年写这篇文章的时候还可以下载,现在应该是下载不了了,我上传到了百度网盘:

链接:https://pan.baidu.com/s/1NPi_nKF42UMWVecfHOGVTA 
提取码:3mxn


tar xvf rinetd.tar.gz
cd rinetd
make && make install
# 我通过qemu-kvm+libvirtd创建的win2016虚机,将其3389转发出去,一遍远程维护;如此就不用对虚机进行桥接网络的配置。
echo "0.0.0.0 3389 192.168.122.253 3389" > /etc/rinetd.conf
# 不指定-c 选项配置文件的情况下,Rinetd 使用默认的配置文件 /etc/rinetd.conf。
rinetd 或 rinetd -c /etc/rinetd.conf
# 停止rinetd
pkill rinetd

转发规则

Rinetd 的大部分配置都是配置转发规则,规则如下:
bindaddress   bindport   connectaddress  connectport
 绑定地址          绑定端口     转发地址            转发端口

绑定地址:将绑定端口绑定到本机的哪个IP地址上,0.0.0.0:绑定到所有接口。
绑定端口:任意,保证本地端口不冲突即可。
转发地址:真实服务所在IP地址,比如:NAT方式创建虚机自动分配的地址:192.168.122.253
转发端口:真实服务的端口,比如:虚机上SSH服务暴露的端口22/tcp。

访问控制

Rinetd 使用 allow pattern 和 deny pattern 两个关键字进行访问权限的控制。如:
allow|deny pattern
例如:
allow 192.168.115.*
deny 192.168.115.1

pattern 的内容:

1、必须是一个 IP 地址,不能是主机名或者域名。
2、可以使用 ? 匹配 0 - 9 的任意一个字符,
3、使用 * 匹配 0 -9 的任意个的字符。

规则类型:
全局规则:在转发规则之前配置的权限规则会作为一个全局生效的规则生效;

特定规则:在转发规则之后配置的权限规则仅适用于本条转发规则。

匹配优先级:
校验的过程是先校验是否能够通过全局规则,再校验特定的规则。

注册systemd服务

# cat /usr/lib/systemd/system/rinetd.service 
[Unit]
Description=Rinet server daemon
After=network.target 

[Service]
Type=forking
ExecStart=/usr/sbin/rinetd
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/bin/pkill rinetd

[Install]
WantedBy=multi-user.target

systemctl start rinetd      ---启动rinetd服务
systemctl restart rinetd   ---重启rinetd服务
systemctl stop rinetd      ---停止rinetd服务
systemctl enable rinetd  ---设置rinetd开机自启动
systemctl reload rinetd  ---修改/etc/rinetd.conf之后,重新加载配置

日志管理

Rinetd 可以产生使用制表符分隔的日志或者 Web 服务器下的通用日志格式。默认情况下,Rinetd 不产生日志,如果需要获取日志,需要添加配置:
logfile log-file-location
例如:
logfile /var/log/rinetd.log

日志格式如下:

01/Dec/2020:17:40:34    192.168.115.223  0.0.0.0 3389    192.168.122.253 3389    1299    1839    done-remote-closed
01/Dec/2020:17:42:42    192.168.115.223  0.0.0.0 3389    192.168.122.253 3389    41402   275600  done-remote-closed

Windows上进行端口转发

如上所述,测试环境下,使用rinetd既方便又轻量,可谓佳品。但是Windows上怎么做端口转发呢?可以使用Windows自带的netsh工具进行端口转发,也很易用!

NOTE:1、必须使用管理员权限,否则执行命令将无效;2、只对TCP端口进行转发,对于UDP端口将不起作用;

管理员权限启动powershell,执行netsh进入交互视图:

#查看当前的端口转发策略
netsh>interface portproxy show all

#使用10.10.26.98上的22端口转发172.16.11.193:22002端口
netsh>interface portproxy add v4tov4 listenaddress=10.10.26.98 listenport=22 connectaddress=172.16.11.193 connectport=22002

# 使用本地22端口转发 192.168.10.249:22
netsh interface portproxy set v4tov4 listenaddress=127.0.0.1 listenport=22 connectaddress=192.168.10.249 connectport=22
验证:(只能本地请求22端口)
netstat -ano |findstr 22
  TCP    127.0.0.1:22           0.0.0.0:0              LISTENING       4656
如上,只能本机访问,如若其他地址访问,则
netsh interface portproxy set v4tov4 listenaddress=10.10.26.98 listenport=22 connectaddress=192.168.10.249 connectport=22

netsh interface portproxy set v4tov4 listenport=22 connectaddress=192.168.10.249 connectport=22

# listenaddress地址可以任意配置,但是没有路由表项支持,肯定是不可达的。所以必须配置为Windows本机上的IP地址。
# 如若想实现Windows本机对外访问 A:PortA,重定向到 B:PortB,也是可以实现的:
netsh interface portproxy set v4tov4 listenaddress=A listenport=PortA connectaddress=B connectport=PortB
devmgmt.msc ==>操作 ==>添加过时硬件 ==>安装我手动从列表选择的硬件 ==>网络适配器 ==>厂商:Microsoft,KM-Test环回适配器 ;然后在该适配器上配置IP地址为:A

#删除上述设置的端口转发策略
netsh>interface portproxy delete v4tov4 listenaddress=10.10.26.98 listenport=22

netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=22

#删除所有端口转发策略
netsh>interface portproxy reset

参考链接:rinetd 在生产环境要谨慎使用_woshiaotian的专栏-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值