端口转发(iptables,nginx,rinetd,ssh隧道)

端口转发实验

  • rinetd
  • iptables
  • nginx
  • ssh隧道

一,rinetd转发实验

服务器内网ip为192.168.195.128,10.1.41.111

客户端ip 10.1.41.3 

远程服务端为 192.168.195.132

通过端口转发,实现访问服务器的10.1.41.111 的63497端口,然后转发到192.168.195.132的3389端口,实现远程桌面的登录

端口转发(iptables,nginx,rinetd,ssh隧道)_第1张图片

操作如下:

yum install gcc gcc-c++ -y
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz 
tar -xvf rinetd.tar.gz && cd rinetd && mkdir /usr/man/man8 -pv && make && make install

编辑配置文件

vim /etc/rinetd.conf
10.1.41.111 63497 192.168.195.132 3389

启动程序

rinetd -c /etc/rinetd.conf

端口转发(iptables,nginx,rinetd,ssh隧道)_第2张图片

远程连接测试

端口转发(iptables,nginx,rinetd,ssh隧道)_第3张图片

写成服务如下

#!/bin/bash
# chkconfig: 2345 88 12
# description: rinetd
RINETD=/usr/sbin/rinetd
RINETDCONF=/etc/rinetd.conf
PID=`ps aux | grep rinetd | grep -v "grep" | awk -F" " '/\/sbin\/rinetd/{print $2}'`
if [ -e $RINETDCONF ]; then
        echo "ok" &> /dev/null
else
        echo "Configuration file not found"
        exit 1
fi
case "$1" in
        start)
                echo -n "Starting rinetd..."
                $RINETD -c $RINETDCONF &>/dev/null
                echo " done."
                ;;
        stop)
                echo -n "Stopping rinetd..."
                kill -9 $PID &>/dev/null
                echo " done."
        ;;
        restart)
                $0 stop
                sleep 1
                $0 start
                ;;
        *)
                echo "Usage: $0 start|stop|restart"
                ;;
        esac
exit 0

授执行权限并加入开机启动

chmod a+x /etc/init.d/rinetd 
chkconfig --add rinetd
chkconfig rinetd on

二,iptables转发实验

端口转发(iptables,nginx,rinetd,ssh隧道)_第4张图片

在 转发服务器配置如下

echo 1 > /proc/sys/net/ipv4/ip_forward #临时开启
iptables -t nat  -A PREROUTING -d 10.1.41.131/32 -p tcp -m tcp --dport 40080 -j DNAT --to-destination 192.168.153.130:80
iptables -t nat -A POSTROUTING -d 192.168.153.130/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.153.128

端口转发(iptables,nginx,rinetd,ssh隧道)_第5张图片

三,nginx stream 转发

编辑NGINX配置文件,默认配置为/etc/nginx/nginx.conf

vim /etc/nginx/nginx.conf
http{
....
}

stream {
    upstream web1ssh {
        hash $remote_addr consistent;
        server 10.42.1.200:65534 weight=5 max_fails=3 fail_timeout=30s;
    }
    server {
                listen 36325;
                proxy_pass web1ssh ;
        }
}

启动NGINX,即可将远端的端口转发到server监听的端口 

四,SSH隧道

SSH转发对于传输使用未加密协议,访问地理限制内容或绕过中间防火墙的服务的网络数据非常有用。 基本上,您可以转发任何TCP端口并通过安全的SSH连接隧道传输流量。

SSH 端口转发有三种类型:

        本地端口转发。 - 将连接从客户端主机转发到 SSH 服务器主机,然后转发到目标主机端口。

        远程端口转发。 - 将端口从服务器主机转发到客户端主机,然后转发到目标主机端口。

        动态端口转发。 - 创建 SOCKS 代理服务器,允许跨一系列端口进行通信。

本地端口转发

语法: ssh -L [local_bind_addr:]local_port:remote:remote_port middle_host
ssh  -L 127.0.0.1:26379:127.0.0.1:6379 [email protected] -p22299 -N  -f -i ./siyao
# 意思就是 把远端的 127.0.0.1:6379  映射到本地的 127.0.0.1:26379 端口 
# -f 就是放后台运行
# -i 指定私钥
其中"-L"选项表示本地端口转发,监听本地端口 ,其工作方式为:在本地指定一个由ssh监听的转发端口(26379),
将远程主机的端口(127.0.0.1:6379 )映射为本地端口(26379),当有主机连接本地映射端口(26379)时,本地ssh就将此端口的数据包转发给中间主机(或者远端主机)

远端端口转发

语法: ssh -R [bind_addr:]remote1_port:host:port remote1

参考博客:SSH隧道:端口转发功能详解 - 骏马金龙 - 博客园

你可能感兴趣的:(linux,Linux,tools,servlet,服务器,nginx,rinetd,iptables)