linux端口转发技术(单端口分发)

2022-08-01 15:19:18 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

端口转发映射的程序叫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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125868.html原文链接:https://javaforall.cn

0 人点赞