現在線上有個需求,訪問某源的地址,需要通過一個固定的出口出去才行。那麼這裏想到的轉發的幾種方式:
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端口