树莓派穿透内网

家里的宽带没有公网IP,从外面没有办法SSH到树莓派上。如果有公网IP的话,现在一般的路由器都支持端口转发功能,在路由器的管理界面添加一条转发规则即可。

不过有一天,我突然想到了SSH的端口转发功能,其实很简单的一条命令:

ssh -N -f -R 8022:localhost:22 xxx@remote-host.com

简单解释一下,-N表示了不要执行任何命令,-f表示在后台执行,-R 8022:localhost:22表示remote-host.com上将会监听8022端口,并将所有的流量转发到localhost:22端口上来。就是这么简单。

当然了,前提是你要有一台有公网IP的主机,这个就自己想办法搞定吧,比如阿里云什么的。

但是,这个办法有个缺点,树莓派重启了就失效了,可以参考[这个][autosshd],在树莓派上略加修改就能用了,把autosshd脚本放到/etc/init.d下,再执行

update-rd.d autosshd defaults

autosshd加到自启动项里去。其实这个脚本就是利用了autossh这个工具。

不过我对上面的那个脚本做了些修改,供大家参考:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          autossh
# Required-Start:    $network $local_fs
# Required-Stop:     $network $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: This script starts and stops the autossh daemon
### END INIT INFO

# Source function library.
#. /etc/rc.d/init.d/functions

# Source networking configuration.
#. /etc/sysconfig/network

# Check that networking is up.
#[ ${NETWORKING} = "no" ] && exit 0

TUNNEL_SSHCONFIG="/home/pi/.ssh/config"
TUNNEL_IDENTITY="/home/pi/.ssh/id_rsa"
TUNNEL_HOST="xxx@remote-host.com"
TUNNEL_REDIRECT="8022:localhost:22"

export AUTOSSH_PIDFILE="/var/run/autossh.pid"

# By default it's all good.
RETVAL=0

# Start function.
start() {
    local name=$1
    echo -n $"Starting ${name}: "
    if [ -e "/var/lock/subsys/${name}" ]; then
        if [ -e "/var/run/${name}.pid" ] && [ -e /proc/`cat /var/run/${name}.pid` ]; then
            echo -n $"already exists.";
            failure $"already exists.";
            echo
            return 1
        fi
    fi
    #daemon /usr/bin/autossh -M 0 -f -nNT -F ${TUNNEL_SSHCONFIG} -i ${TUNNEL_IDENTITY} ${TUNNEL_HOST}
    /usr/bin/autossh -f -M 0 -CNnqT -F ${TUNNEL_SSHCONFIG} -i ${TUNNEL_IDENTITY} -R ${TUNNEL_REDIRECT} ${TUNNEL_HOST} -o ServerAliveInterval=30 -o ServerAliveCountMax=5
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch "/var/lock/subsys/${name}"
    echo
    return $RETVAL
}

# Stop function.
stop() {
    local name=$1
    echo -n $"Stopping ${name}: "
    #killproc -p "/var/run/${name}.pid" ${name}
    kill `cat /var/run/${name}.pid`
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f "/var/lock/subsys/${name}"
    return $RETVAL
}

# See how we were called.
case "$1" in
    start)
        start "autossh"
        ;;
    stop)
        stop "autossh"
        ;;
    restart)
        $0 stop
        sleep 3
        $0 start
        ;;
    status)
        status "autossh"
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac

exit $RETVAL

做了几点改进:

  1. 修改了一下在树莓派上可以跑,但是很多地方还有待改进
  2. 修改了ssh的启动参数,添加了-Cq,可以man ssh自己看
  3. 添加了-o ServerAliveInterval=30 -o ServerAliveCountMax=5,可以自动检测SSH连接可用性
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树莓派的FRP是一种用于实现内网穿透的工具。通过FRP,您可以将位于NAT或防火墙后面的本地服务器暴露到互联网上。树莓派使用FRP来实现内网穿透的操作步骤如下: 1. 准备材料:您需要一台虚拟专用服务器(VPS),您可以选择使用virmach提供的虚拟专用服务器。 2. 配置服务器端:在虚拟专用服务器上安装并配置FRP。具体的配置步骤可以参考中的教程。 3. 配置客户端-树莓派:在树莓派上进行配置,使其能够与服务器端进行通信。具体的配置步骤可以参考中的教程。 4. 验证内网穿透:完成上述配置后,您可以尝试在树莓派上部署一个Web服务器,例如Apache、Nginx或Tomcat,并发布自己的项目。然后通过云服务器的IP地址和端口来访问树莓派所部署的项目,以验证内网穿透是否成功。具体的验证步骤可以参考中的说明。 如果您想重新安装FRP,可以按照中提供的方法进行卸载和重装。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [树莓派内网穿透方法大全](https://blog.csdn.net/concefly/article/details/115076359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [树莓派使用FRP实现内网穿透教程](https://blog.csdn.net/qq_41676577/article/details/112856618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [树莓派怎么实现内网穿透?](https://blog.csdn.net/weixin_47198051/article/details/122962247)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值