端口映射和转发在实际应用中非常常见,比如一个局域网只有一台服务器可以被互联网访问到,那么如果想通过互联网访问局域网中其他的服务,最常用的方式就是在这一台机器上开放端口,然后转发至局域网中其他主机的端口,实现内网服务的访问,而在互联网中就好像直接使用这个服务一样没什么变化,端口转发的大致流程如下图所示:

上面这个是一个简单的示例,其中ip都是随便写的,过程很简单就是代理服务器对应的公网ip为:212.121.87.168,也就是访问公网ip就可以直接访问到37.58.1.2,同样访问18080端口就相当于内网的8080端口,这个ip和端口映射的过程是由路由器来实现的,另外在server1服务器上有一个redis服务,端口为6379,我们现在就是要实现将代理服务器的8080端口转发至server1的6379端口,直接通过访问代理服务器来实现server1 redis服务的访问.  正常情况下这类的转发过程很多工具都可以实现,比如nginx,haproxy以及linux自带的iptables或者firewalld服务都可以通过配置来实现,本文主要叙述一款rinetd的工具来实现端口转发,安装和配置都比较简单,用起来也比较好用,具体安装配置如下:

  rinetd官方下载地址为:https://boutell.com/rinetd/ 进入后直接找到WHERE TO GET下载linux版本:,下载成功后接下来我们需要在代理服务器上进行安装,从而实现将端口转发至server1,分别执行下面命令安装:

tar -xvzf rinetd.tar.gz
cd rinetd/

  执行编译: make

  然后如果现在直接执行安装会出现/usr/man找不到的错误,因为年代比较久远的原因,默认rinetd会将帮助写入/usr/man下,而linux可能不存在/usr/man这个目录,所以会写入失败报错,现在只需要手动执行: mkdir /usr/man

  然后安装: make install 即可成功,执行 rinetd -v 可以查看版本号,最新的是0.62

  rinetd配置文件默认不存在需要自己手动创建,执行: vim /etc/rinetd.conf ,然后添加如下内容:

0.0.0.0  37.58.1.21 

  配置非常简单,第一个是rinetd绑定本地代理服务器的地址,0.0.0.0是绑定所有的网卡地址,当然也可以直接绑定ip地址即37.58.1.2;后面8080是rinetd监听的转发端口;第三个是转发到目标服务器的ip,这里是server1的地址即37.58.1.21,最后6379是转发到目标服务器的端口,这里服务为redis,这条配置生效后,会将本地8080端口收到的所有数据原封不动的发送至目标服务器的指定端口,另外需要注意目标服务器的实际ip和端口号必须被正确绑定才可以,其中ip一定不要绑定127.0.0.1而是实际ip,否则会报错.  配置完毕后就可以执行下面命令启动rinetd服务了

rinetd -c /etc/rinetd.conf

  其中-c参数指定配置文件的路径,如果不加默认就是/etc/rinetd.conf,启动后查看进程正常存在并且端口正常绑定即可测试使用,这时候在内网直接连接37.58.1.2 8080或者在外网直接连接212.121.87.168 18080,应该都可以正常访问到server1上的6379了.

最新文章

  1. webstorm基础使用总结
  2. Javascript学习总结
  3. ajax回调中的this.href不执行跳转的解决办法
  4. Gas Station
  5. java小程序 实例 二分法查找
  6. Week8 软件规格说明书
  7. PowerDesigner提示This data item is already used in a primary identifier.的处理
  8. hdu 3859 Inverting Cups
  9. CreateToolhelp32Snapshot
  10. CentOS下Redis 2.2.14安装配置详解(转载)
  11. Android项目--Json解析
  12. liunx 定时执行 php文件
  13. element ui datePicker 设置当前日期之前的日期不可选
  14. 423 重温Java Script and jQuery 葵花宝典 Bootstrap
  15. SpringMVC云题库错题及答案汇总-2
  16. python 数据结构之二叉树
  17. iOS 线程安全--锁
  18. Java URLDecoder 和 URLEncoder 对中文进行编码和解码
  19. 【题解】 bzoj1911: [Apio2010]特别行动队 (动态规划+斜率优化)
  20. 【Phalapi2.0】 如何使用 source 通过 header 传参数

热门文章

  1. LeetCode(29): 两数相除
  2. web----框架基础
  3. python 全栈开发,Day54(jQuery的属性操作,使用jQuery操作input的value值,jQuery的文档操作)
  4. oracle分区表彻底删除的办法,处理删不掉的不规则表名
  5. python第三方包安装方法(两种方法)
  6. django url解析中的ResolverMatch
  7. Python - 常用更新命令以及常见库安装
  8. Cpu 主频与睿频
  9. hibernate update 只更新部分字段的3种方法(转载)
  10. PopupWindow下拉列表