环境
内网主机archlinux系统,公网阿里云或者其它云主机一台。
## 内网也可以是openwrt OR lede固件的路由器,支持ssh就行。
云主机配置
# nano /etc/ssh/sshd_config
去掉GatewayPorts
前面的#
号,并把no
改成yes
同时也去掉下面两项的#
并修改
TCPKeepAlive yes
ClientAliveInterval 60 #60代表每一分钟查检一次客户端的连接情况
ClientAliveCountMax 3 # 检查3次,客户端无响应则中断连接
创建一个用于穿透的普通账号
# useradd -m proxyuser #不同系统创建用户的方法不同
# passwd proxyuser
重启sshd服务systemctl restart sshd
内网archlinux主机配置
安装autossh来运行穿透,防掉线
$ sudo pacman -Suy
$ sudo pacman -S autossh
新建普通用户用于穿透
$ sudo useradd -m autosshuser
$ sudo passwd autosshuser
创建SSH钥匙并上传到云主机
$ su - autosshuser
$ ssh-keygen -t 'rsa' -b '4096' -C 'autosshuser@hostname' //hostname填写当前主机名,注意该密钥不要设置密码,尽管一路回车,不要输入额外的字符。
$ ssh-copy-id proxyuser@yunIP //yunIP 可以是你的云主机IP或者域名
运行autossh反向代理
$ autossh -p 2222 -M 8181 -fCNR '*:8080:localhost:80' proxyuser@yunIP -i /home/autosshuser/.ssh/id_rsa
-p 2222是指云主机的SSHD端口,默认是22,若有修改请指定。
-M 参数指定的端口用来监听隧道的状态,与端口转发无关。
-f 静默运行。
-C 数据压缩,网速快不要加。
-N 不执行任何指令。
-R 使用远程端口转发。
NR通常是共同使用。
现在可以使用http://yunIP:8080
来访问你本机的80端口了,*:8080:localhost:80
中的localhost:80
, 也要可以改成内网中其实的主机,如 192.168.1.1:80
,就可以用http://yunIP:8080
访问路由。
以服务运行autossh
$ sudo nano /usr/lib/systemd/system/autossh.service
添加内容
[Unit]
Description=Auto SSH Tunnel
After=network.target
[Service]
User=autossh
Type=simple
ExecStart=/bin/autossh -p 2222 -M 8181 -fCNR '*:8080:localhost:80' proxyuser@yunIP -i /home/autosshuser/.ssh/id_rsa
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
注意不要照抄我的配置 ,里面的参数还需要你自己改,特别是yunIP
及/bin/autossh
路径。
加载和启动服务
$ sudo systemctl daemon-reload
$ sudo systemctl enable autossh
$ sudo systemctl start autossh
有问题请留言。