zoukankan      html  css  js  c++  java
  • 如何用ssh实现端口的映射

    如何用ssh实现端口的映射?

    为了解决什么问题,应该就是ssh服务器程序在22号端口监听,难道这就是用软件实现了

    实现隧道的方法真是有好几种,包括使用ssh,包括使用tap,或者使用ssh都是可以的,今天试验下如何使用ssh实现隧道功能。

    测试程序在

    codebox/net/sock/inet/server.cpp

    codebox/net/sock/inet/client.cpp

    codebox/net/sock/inet/Makefile

    在目录里make一下就可以

    测试的方法就是在虚机中跑上server,然后在宿主机上连上ssh,

     ssh -L 7001:192.168.0.110:10943 192.168.0.110
    此时client端需要把包发到:127.0.0.1:7001端口,ssh会在这个端口上监听

    这个时候需要程序的就需要在配置文件中增加本地proxy的选项了。

    192.168.0.110 这个地方应该填啥东西呢?

    ssh     456 root    5u  IPv4 3146860      0t0  TCP localhost:afs3-callback (LISTEN)
    此时就是ssh在监听这个地址,所有发往这个结果的地址都会被发送到本地:7001这个地址,然后通过ssh这条线发送。

    就是我ssh的线程在监听呀

    但是使用这个段需要保证ip_forward一定要打开吗?好像是不需要的!

    试一下,果然是不需要的,比tap的方法好;

    那么能不能实现一个真正的管道程序呢?有这样三台机器:

    client    -----> stationA (192.168.0.110) -------> Terminate(192.168.1.110)

    使用如下的指令,192.168.1.110 ,然后使用ssh登录stationA,然后在这个stationA,然后在client上执行client,此时就就可以把所有的流量都导流到了stationsA,stationsA上sshd,就会收到这个这份数据,然后转发Terminate机器上啦。

    ssh -L 7001:192.168.1.110:10943 192.168.0.110

    这篇文章可以与之前写的ppp协议作对比

    之前想过,其实用户态程序本来可以完成数据转发的功能,可以不依赖于内核的ppp功能,两篇文章对比下

    -====== 我是分割线呀========

    今天研究这个问题是考虑到了nat中的output的链,output链会在路由之前把目的ip/port给改掉,现在这个转换我们是在代码里写死的,那么同样这个功能是否可以通过iptables来完成呢?

    我把目的地址192.168.1.110这个地址给屏蔽掉,发现连收包都收不到了,按理说有了中转机做代理,和目的地址就无关了呀,这个问题可能是和ip的配置相关,如果目的地址不可达,那么不接受这个数据包!!!!

    默认情况下,如果目的地址不可达是不可以收数据包的!

    sudo iptables -t nat -A OUTPUT -p tcp --dport 7002 -j REDIRECT --to-ports 7001

    使用iptables同样能达到相同的效果,注意-p --dport同时使用,并且-p在前 --dport在后

      1  sudo iptables -t nat -A OUTPUT -d 192.168.1.111 -p tcp --dport 20943 -j DNAT --to 127.0.0.1:7001

  • 相关阅读:
    页面框架布局
    socket、tcp、udp、http 的认识及区别
    servlet验证码的设置
    java换行符
    如何在jsp里禁止session
    EL和JSTL表达式
    C标签
    request与response
    文件上传与下载—>struts
    页面跳转
  • 原文地址:https://www.cnblogs.com/honpey/p/9033144.html
Copyright © 2011-2022 走看看