现在线上有个需求,访问某源的地址,需要通过一个固定的出口出去才行。那么这里想到的转发的几种方式:
1.iptables对端口做转发,这种需要开启内核转发。配置几条iptables规则就好。
2.rinetd对端口做转发,转发规则类似于反响代理,或者nat 而且配置比较简单。配置出错也不会导致网络访问问题。
下面就来介绍rinetd的端口转发
参考官网地址: https://www.boutell.com/rinetd/
下面直接是上干货
# tar -zxvf rinetd.tar.gz -C /usr/local # cd rinetd [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 install: cannot create regular file `/usr/man/man8': No such file or directory make: *** [install] Error 1 [root@localhost rinetd]# mkdir -p /usr/man/ [root@localhost 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地址上:
例如将所有发往本机81端口的请求转发到某地址的80端口
[root@localhost rinetd]# vim /etc/rinetd.conf allow *.*.*.* //设置允许访问的ip地址信息 0.0.0.0 81 目标IP 80 //设置端口转发 logfile /var/log/rinetd.log //设置打印的log #启动程序并将rinetd加入开机启动 [root@localhost 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:81 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:81 0.0.0.0:* LISTEN 5861/rinetd 启动程序 pkill rinetd ##关闭进程 rinetd -c /etc/rinetd.conf ##启动转发 把这条命令加到/etc/rc.local里面就可以开机自动运行 查看状态 netstat -antup 需要注意 1.rinetd.conf中绑定的本机端口必须没有被其它程序占用 2.运行rinetd的系统防火墙应该打开绑定的本机端口 例如: -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1111 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT
#至此就可以进行访问测试了!所有访问本机81端口的请求,都会转发到 目标IP 的 80端口