一、rinetd进行端口转发
#下载
wget http://www.rinetd.com/download/rinetd.tar.gz
#解压安装
tar zxvf rinetd.tar.gz
make
make install
#编辑配置
#将所有发往本机50000端口的请求转发到172.16.10.4的50000端口
vi /etc/rinetd.conf
0.0.0.0 50000 172.16.10.4 50000
#启动
/usr/sbin/rinetd
#关闭
pkill rinetd
#查看状态
netstat -tnlp
二、使用nginx进行四层端口转发
三、使用ssh端口转发
四、使用iptables进行端口转发
#! /bin/sh
# create forward rule by source interface
# http://serverfault.com/questions/532569/how-to-do-port-forwarding-redirecting-on-debian
PortForward1() {
local IN_IF=$1
local IN_PORT=$2
local OUT_IP=$3
local OUT_PORT=$4
local IPTBL="/sbin/iptables"
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IN_IF -p tcp --dport $IN_PORT -j DNAT --to-destination ${OUT_IP}:${OUT_PORT}
$IPTBL -A FORWARD -p tcp -d $OUT_IP --dport $OUT_PORT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE
}
# create forward rule by source ip
# http://blog.csdn.net/zzhongcy/article/details/42738285
ForwardPort2() {
local IN_IP=$1
local IN_PORT=$2
local OUT_IP=$3
local OUT_PORT=$4
local IPTBL="/sbin/iptables"
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -t nat -A PREROUTING --dst $IN_IP -p tcp --dport $IN_PORT -j DNAT --to-destination ${OUT_IP}:${OUT_PORT}
$IPTBL -t nat -A POSTROUTING --dst $OUT_IP -p tcp --dport $OUT_PORT -j SNAT --to-source $IN_IP
}
第一个函数是按照网卡名称设置转发:
PortForward1 eth1 8765 202.115.8.2 8765
这时,本地 eth1 网卡的 8765 端口就会被转发给 202.115.8.2 的 8765 端口。
第二个函数是按照本机的 ip 地址,比如本机是 192.168.1.2:
PortForward2 192.168.1.2 8765 202.115.8.2 8765
那么任何访问本机 192.168.1.2 这个地址 8765 端口,都会被转发到 202.115.8.2:8765
这个 iptable 的 port forwarding 是内核层运行的,性能极好,只不过每次重启都需要重新设置下。
参考文档:https://zhuanlan.zhihu.com/p/57630633