转载

几个端口转发的例子

很多情况下,我们往往需要通过对某个端口进行转发(端口映射)实现某些特殊功能,比如堡垒机和负载均衡什么的。在这里我就稍微总结了几种最常用的端口转发方式供大家参考。

Linux防火墙模式——反向NAT

这种模式大多是要求用户很快速的实现将外网的某个端口eth0 1.1.1.1:80的流量引流到内网的一台主机10.0.0.1:8080中,本机内网IP eth1 10.0.0.2这种模式性能是毋庸置疑的,但相对来说稳定性和可控性不佳,往往用于临时过渡

sysctl net.ipv4.ip_forward=1 #这个配置非常重要! iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.1 iptables -t nat -A POSTROUTING -s 10.0.0.1/255.0.0.0 -d 10.0.0.1 -p tcp -m tcp --dport 8080 -j SNAT --to-source 10.0.0.2

Haproxy

这个方式其实根防火墙模式很相似,不过经过HAproxy的封装,增加了很多方便的配置,你可以很方便的配置出简单的负载均衡规则,状态监控,日志方式甚至于配置心跳等,适合作为中等以上规模的负载均衡集群。

具体的配置大家可以参考官方文档或者直接修改安装包内的默认配置文件,非常浅显易懂!

SSH tunnel

不得不说,SSH是一个很强大的工具。它完全可以应付简单的端口转发和链路加密。适用于低流量的两台互信主机之间的信息加密,它还有个特点是它支持带宽压缩,可以节约部分带宽资源。

配置方式可以参考这里

netcat

工具几乎所有的linux都默认安装了netcat工具(部分Linux的版本用的是OpenBSD-nc,与netcat略有不同,尽管名字一致),这可是一个强大的tcp/ip工具哦。感觉这样的操作有点黑科技的意思了,建议做调试的时候可以用用。

这个例子是把本地的81号端口的访问转移到80号

mknod tunnel p #创建一个临时的管道文件tunnel netcat -l -p 81 0 < tunnel | netcat -l -p 80 | tee tunnel

socat

其实这个命令根上一个非常类似,从名字上就看得出这个是针对于linux下socket文件的netcat。多数Linux都可以通过默认源来安装。由于是直接建立本地的socket文件,就不需要像上例那样创建管道文件了。

把所有本地的80号转移到10.0.0.1的8080上

socat -d -d -l TCP4-LISTEN:80,reuseaddr,fork,su=nobody TCP4:10.0.0.1:8080

Windows 的netsh

说到底我们用的最多的还是windows,尽管装一个cygwin可以实现几乎上面所有的操作,但最佳的解决方案还是用原生的吧。netsh是windows的一个网络工具,只要你愿意,你在命令行下可以通过它实现几乎所有的windows网络操作。

还是把本地80转移到10.0.0.1的8080

netsh interface portproxy add listenport=80 connectaddress=10.0.0.1 connectport=8080
正文到此结束
Loading...