端口转发映射的程序叫rinetd,下载地址,直接manke编译安装即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@PortForward02 src]
# wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
[root@PortForward02 src]
# ls
rinetd.
tar
.gz
[root@PortForward02 src]
# tar -zxvf rinetd.tar.gz
[root@PortForward02 src]
# cd rinetd
[root@PortForward02 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@PortForward02 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
[root@PortForward02 rinetd]
#
|
运行make可能会出现错误,需如下修改,将rinetd.c文件中bindPort >= 65536和connectPort >= 65536修改为65535,不然在make的时候会提示超出系统最大定义端口,按n可以查找下一处
1
2
3
4
5
|
[root@PortForward02 rinetd]
# vim rinetd.c
544
if
((bindPort == 0) || (bindPort >= 65535)) {
567
if
((connectPort == 0) || (connectPort >= 65535)) {
或者
[root@localhost rinetd]
# sed -i "s/35536/35535/g" rinetd.c
|
手动建目录/usr/man/
1
2
3
4
5
6
7
8
9
10
11
|
[root@PortForward02 rinetd]
# mkdir -p /usr/man/
[root@PortForward02 rinetd]
# make clean
[root@localhost 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@localhost rinetd]
# make install
install
-m 700 rinetd
/usr/sbin
install
-m 644 rinetd.8
/usr/man/man8
[root@localhost rinetd]
#
|
成功后会提示文件路径
install -m 700 rinetd /usr/sbin
install -m 644 rinetd.8 /usr/man/man8
程序路径/usr/sbin/rinetd
建立配置文件/etc/rinetd.conf,内容格式:源IP 源端口 要跳转的IP 要跳转的端口;在每一单独的行中指定每个要转发的端口。源地址和目的地址都可以是主机名或IP 地址,IP 地址0.0.0.0 将rinetd 绑定到任何可用的本地IP地址上:
例如将所有发往本机80端口的请求转发到192.168.4.247的80端口
1
2
3
4
5
6
7
|
[root@localhost rinetd]
# vim /etc/rinetd.conf
allow 10.15.44.162
//
设置允许访问的ip地址信息
# allow 0.0.0.0
#allow 10.15.44.*
#deny 10.15.44.144
0.0.0.0 8090 10.15.44.133 80
//
设置端口转发
logfile
/var/log/rinetd
.log
//
设置打印的log
|
启动程序并将rinetd加入开机启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@PortForward02 rinetd]
# /usr/sbin/rinetd
或者
[root@localhost rinetd]
# rinetd -c /etc/rinetd.conf
[root@localhost rinetd]
# netstat -antulp|grep -i rinetd
tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 5849
/rinetd
[root@localhost rinetd]
# killall -9 rinetd 或者pkill -9 rinetd
[root@localhost rinetd]
# netstat -antulp|grep -i rinetd
[root@localhost rinetd]
# rinetd
[root@localhost rinetd]
# netstat -antulp|grep -i rinetd
tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 5861
/rinetd
[root@PortForward02 rinetd]
# cat /etc/rc.d/rc.local |grep -v "#"
/usr/sbin/rinetd
-c
/etc/rinetd
.conf
touch
/var/lock/subsys/local
[root@PortForward02 rinetd]
#
|
这样的话只要在任意浏览器访问:http://10.15.44.125:8090(rinetd服务器地址)就和访问http://10.15.44.133同样的效果。但是这个只能在10.15.44.162机器上实现,其他机器就不行,如果
注意事项
1. rinetd.conf中绑定的本机端口必须没有被其它程序占用
2. 运行rinetd的系统防火墙应该打开绑定的本机端口
1
|
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT
|
3.不支持FTP的跳
socat作用是在两个流之间建立双向的通道,且支持众多协议和链接方式:ip,tcp,udp,ipv6,pipe,exec,system,open,proxy,openssl,socket等
yum 方式安装:
1
2
3
|
wget –no-cache http:
//www
.convirture.com
/repos/definitions/rhel/6
.x
/convirt
.repo -O
/etc/yum
.repos.d
/convirt
.repo
yum makecache
yum
install
socat
|
使用方式:
1
2
|
nohup
socat tcp-l:外部访问端口,reuseaddr,fork tcp:192.168.xxx.xxx:内部转发端口
nohup
socat TCP4-LISTEN:188,reuseaddr,fork TCP4:192.168.1.22:123 &
|
在本地监听188端口,并将请求转发至192.168.1.22的123端口
TCP4-LISTEN:在本地建立的是一个TCP ipv4协议的监听端口;
reuseaddr:绑定本地一个端口;
fork:设定多链接模式,即当一个链接被建立后,自动复制一个同样的端口再进行监听
socat启动监听模式会在前端占用一个shell,因此需使其在后台执行。
附:socat官方文档:http://www.dest-unreach.org/socat/doc/socat.html
本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1621753,如需转载请自行联系原作者