linuxrinetd、socat埠轉發部署(很實用的網路工具)

神棍先生發表於2017-11-06

埠轉發對映的程式叫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



相關文章