ssh tunnel 问题求助
- 0次
- 2021-07-02 18:53:59
- idczone
之前我将公司的内网机器,自己的 openwrt ,公司内网 web 这些需要的端口都用 autossh 映射到了 vps 上( debian ),我可以在任何地方通过 vps ip :端口号 进行访问( ssh , web , vnc 之类)
但是最近服务器折腾挂了,换了个 ubuntu ,再次映射后,只能在 vps 本地进行连接。在外网无法用 vps ip :端口进行访问了。
请问该如何设置? iptables 目前全部 accept
感觉你描述不清。。。
是不是这种场景:
例如 vps 的 ip 1.2.3.4 , 公司 出口路由器 公网 ip 2.3.4.5 , 公司出口路由器上做好了映射。
然而出于跨 ISP 速度蛋疼之类的原因,由 VPS 转发:
例如 vps 的 2222 转发到公司的 22:
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 2222 -j DNAT --to-destination 2.3.4.5:22
iptables -t nat -A POSTROUTING -d 2.3.4.5 -p tcp --dport 22 -j SNAT --to-source 1.2.3.4
如此这般,就等价于微林了。
我弄错了, 貌似你是用的 ssh 反向连接。
先在 vps 上看下监听的地址。
vps 可以看到所有的 ssh 监听端口, curl 能拿到网页, ssh 能连。
就是无法在其它机器用 vps 的 IP 和端口 进行连接。用 Debian 时是可以的。
/etc/ssh/sshd_config 里加一句 GatewayPorts yes
我之前用的 ssh tunnel ,不过用着不是很稳定的样子,可以尝试下我的一个用于内网穿透的开源项目 https://github.com/fatedier/frp 。
添加这句后,重启客户机的 autossh 重启 vps 的 ssh ,还是不行。
[email&cat /etc/ssh/ssh
ssh_config ssh_host_ecdsa_key ssh_host_rsa_key
sshd_config ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub
ssh_host_dsa_key ssh_host_ed25519_key
ssh_host_dsa_key.pub ssh_host_ed25519_key.pub
[email&cat /etc/ssh/sshd_config
Package generated configuration file
See the sshd_config(5) manpage for details
What ports, IPs and protocols we listen for
Port 29688
Use these options to restrict which interfaces/protocols sshd will bind to
::
0.0.0.0
Protocol 2
HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
Separation is turned on for security
UsePrivilegeSeparation yes
Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024
Logging
SyslogFacility AUTH
LogLevel INFO
Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
similar for protocol version 2
HostbasedAuthentication no
Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
yes
To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
Change to yes to enable challenge-response passwords (beware issues with
some PAM modules and threads)
ChallengeResponseAuthentication no
Change to no to disable tunnelled clear text passwords
yes
Kerberos options
no
no
yes
yes
GSSAPI options
no
yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
no
10:30:60
/etc/issue.net
Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
Set this to 'yes' to enable PAM authentication, account processing,
and session processing. If this is enabled, PAM authentication will
be allowed through the ChallengeResponseAuthentication and
PasswordAuthentication. Depending on your PAM configuration,
PAM authentication via ChallengeResponseAuthentication may bypass
the setting of "PermitRootLogin without-password".
If you just want the PAM account and session checks to run without
PAM authentication, then enable this but set PasswordAuthentication
and ChallengeResponseAuthentication to 'no'.
GatewayPorts yes
UsePAM yes
[email protected]:~#
感谢,明天上班运行看看。
这个还是要用 vps 跳转所有流量啊。要是能用 Python 写个 socket ,借助 vps 通信,然后可以两个不同 nat 内的机子尝试穿透直接路由就好了。
回复忘记 @ 了
在内网机和 vps 上弄个 n2n / tinc / openvpn 呗。
主要是之前可以用,现在不能用,想找到原因.
如果用 vpn 的话,其它设备要访问资源也要连进来.
vps 上一个 vpn ,内网 linux 上一个 vpn , 其他设备就不需要了。
分别作 DNAT + SNAT , 可以转发任意内网 linux 可访问的 tcp/udp 端口 从 vps 访问, 很灵活。
只是。。。 你明显没有公司出口路由器(或防火墙)的控制权限, 如此这般在防火墙上开洞, 也不太合适吧。
给例子:
vps IP 1.2.3.4 , 隧道接口的 ip 192.168.1.1
内网 linux 的 隧道接口 192.168.1.2 , 内网接口 192.168.2.2.
目的为从外网 ssh 到 192.168.2.3:22 , 可以这样:
vps 上打开 ip forwarding ,然后
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.2:1001
iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 1001 -j SNAT --to-source 192.168.1.1
内网 linux 上也打开 ip forwarding , 然后
iptables -t nat -A PREROUTING -d 192.168.1.2 -p tcp --dport 1001 -j DNAT --to-destination 192.168.2.3:22
iptables -t nat -A POSTROUTING -d 192.168.2.3 -p tcp --dport 22 -j SNAT --to-source 192.168.2.2
然后 ssh 到 1.2.3.4:2222 等同于 192.168.2.3:22
个人认为比较简单易配置的有 openvpn 、 n2n 、 tinc , 当然 pptp 、 ipsec 之类也可。
提到 ip_forwarding , 你检查下这个,是不是相关。
另外, 标准的 vnc 是无加密的,不建议搞成公网可访问。
避免 vps 中转所有流量, 还要穿透 nat , 则 vpn 貌似只能用 udp , tcp 的不行;
udp 在许多地方的 ISP 有明显的限速, 你试过就知道了;
可以试试 n2n 或 tinc 。
上面用 shadowVPN 加 iptables 是可以的. 关于这个我有点疑惑需要请问,可以留个联系方式么.
现在边看看推荐的 n2n 用起来怎样.
QQ 上搜 Siril ,(注意大写首字母), 应该只有 1 个结果,
头顶个面具的就是我。
本人现在是某小公司打杂的 网管 /技术支持, 常有空闲时间。
你说的那种打洞方式的话确实效率比较高,不过不一定能穿透所有的 NAT 设备吧, udp 感觉还好, tcp 的话感觉难度会比较大,而且用户也需要安装客户端支持。相对来说通过 VPS 中转流量的话更加稳定,对用户来说是透明的。
我对这方面也比较感兴趣,如果有什么比较好的方案的话希望能够学习借鉴。
自己编译个 ngrok,超简单