Tech」カテゴリーアーカイブ

使用frp转发vnc和ssh端口到固定ip的服务器

写这篇日记是因为最近一个学妹来问我相关的问题,而我刚好在三年前搭建过这样一个服务。不过在开始之前,必须声明,这篇文章的应用场景非常非常有限。如果你搜到了这篇文章,请先想一想,是不是自己的需求错了。你真的需要搭建这样一个服务吗?

进入正题。我的应用场景是,我刚好有一个服务器,拥有固定ip地址。而我实验室内部的电脑1有防火墙,不能从学校外部访问。我家的电脑2没有固定的ip地址,不能从家外访问。

但是,学校的电脑1,通过学校指定的http proxy可以主动访问外网,并且连接到我的服务器。家里的电脑2也是,虽然ip地址总是改变,但是能够访问我自己的服务器。

那么,解决方案就显而易见了。我们需要搭建一个服务,来接受来自电脑1和电脑2的主动连接请求,并保持这个连接。这样,第三者只需访问服务器的指定端口即可通过反向代理连接到电脑1和电脑2,从而实现内网穿透或是动态转发。

巧的是,frp这一软件刚好能够实现这个需求,同时绑定vnc和ssh的转发。frp分为server端和client端。server端安装在固定ip的服务器上,监听来自client的请求。

安装方法网上有很多,很容易搜索到。下面的安装和配置参考这篇博客:

https://blog.csdn.net/m0_49946916/article/details/107889425

安装运行frps

https://github.com/fatedier/frp 下载最新的frp,上传到VPS,然后按照下面的运行即可

# 解压
tar xf frp_0.33.0_linux_amd64.tar.gz
cd frp_0.33.0_linux_amd64
# 复制可执行程序
cp frps /usr/bin/
# 创建配置文件目录
mkdir /etc/frp
# 复制配置文件
cp frps.ini /etc/frp/
# 复制服务启动脚本
cp systemd/frps.service /etc/systemd/system/
# 重新加载配置文件
systemctl daemon-reload
# 开机启动frps
systemctl enable frps
# 启动frps
systemctl start frps

编辑配置文件,sudo nano /etc/frp/frps.ini

[common]
bind_addr =0.0.0.0
bind_port =7000
token = my_password

这篇教程可能是写的比较早,后期frp的作者在github上更新了web界面来监控运行状态。因此,我自己的配置文件其实还有下半部分

dashboard_port = 7500
# dashboard's username and password are both optional
dashboard_user = my_user
dashboard_pwd = my_password

保存,然后重启一下服务。

接下来,我们配置frpc,也就是电脑1和电脑2 。我的两台电脑是mac系统。不过我相信,linux系统应该也差不多。windows系统可能需要你自己搜一搜配置方法了,不过貌似也差不多。

安装运行frpc

同样下载程序,解压,然后新建一个目录,将frpc和frpc.ini复制到新建的目录

frpc.ini的配置项:

[common]
server_addr = 你的服务器ip
server_port = 7000
protocol = kcp
token = my_password
; login_fail_exit = false

[vnc_Mac1]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 9200
use_encryption = true
use_compression = true

[ssh_Mac1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 9222
use_encryption = true
use_compression = true

上边的common就是要连接的服务器。下面的vnc和ssh就是要转发的两项服务。哦对了,vnc server需要自己提前装好。我的就是默认的vnc 5900端口,ssh 22端口,如果你不是默认的,需要自己改。下面的remote port就是要从服务器访问的端口。比如vnc那里,就是9200,而ssh就是9222端口。这里可以改成你自己喜欢的。

最终效果,就像是你自己diy了一个teamviewer公司一样。但是不得不说,这个只是用来应急的,因为远程连接的时候,屏幕刷新率只有几个fps。不过清晰度是高清的,延迟也还算可以接受,毕竟我的学校,我的电脑,服务器都在东京,延迟也高不到哪里。

小破站又炸了

这已经是本站第三次爆炸了。。。。

这次真的是炸得一点炸儿都不剩,仅存的这点东西还是从谷歌的缓存服务器上扒下来的。。。。

保存在服务器上的文件和数据,以及写好的软件,构建好的服务全都没了

哭死

朋友安慰我说,回忆还可以重新制造的

不过新制造的回忆,还算是回忆吗?

但总之,感谢谷歌!!虽然图片全都丢失了,但文字却保存了下来

2021,新的一年,新的折磨哈哈哈哈

在图书馆用联通网! ——改良版

上回(点此阅读)写了如何在任意地点访问Lab里的服务器,这次算是它的改良版。其实也没什么变化的,只是本次服务器只用一个网卡就能获取ipv6和ipv4而已。

算是一个小优化吧。

服务器单网口同时接入校园网和联通网

因为我的路由器也是Linux的一个发行版,padavan,所以可以通过控制台来开启ipv6

首先,我们设置路由器ipv6的连接类型为Native DHCPv6,选择WAN口为外网接口,设置外网地址为Stateless:RA,自动获取DNS,使用DHCPv6获取内网IPv6地址,启用LAN路由通告。然后应用设置。

然后,我们通过控制台逐条输入以下命令:

modprobe ip6table_mangle
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2
brctl addif br0 eth2.2

这么做是为了:装载ipv6路由表,允许ipv6的数据使用eth2.2,桥接br0和eth2.2使后者成为前者的一个端口。

此处可以将这三行代码保存为脚本,每次路由开机执行。就免去了寝室断电之后要重新执行的麻烦。

这时接在LAN口的设备就能使用联通的ipv4地址,以及校园网ipv6地址了。

然后在这台机器上配置ss-server,即可从校园任何角落连接NEU使用联通网了。

除此之外 搞点事情吧!

既然路由器是linux系统的,为何不好好利用它一下呢?

应当注意到,路由器并没有固定的ip地址,并且可恶的ISP还屏蔽了80端口。所以要实现这个功能,我们需要实现路由器外网ip的ddns,以及80端口的转发。

ddns我选择使用阿里云的,不会像花生壳那样小气每个月只有1GB流量,而且毕竟是阿里系的,安全有保障。

首先,我们需要在阿里云(点此打开)注册账户,此步具体方法略。然后我们打开控制台,鼠标放在右上角头像那里,点击accesskeys,这里会提醒你注意安全,不要理他直接点击继续使用accesskey即可。然后创建一个accesskey。注意!不要向任何人透露你的accesskey和secret!妥善保管!

返回控制台,在左侧应用列表中找到云解析dns这个选项。将你的顶级域名添加进去。比如这里就是leoxxxx.info

之后阿里云会提示要在域名购买商那里把NS改为ns1.aliname.com之类的,照做即可。

至此,在阿里云端的动态解析就完成了。现在我们带着key和secret,访问路由器的动态域名解析页面,将他们填入aliddns对应位置,然后在域名那里填上自己喜欢的名称,如这里我填的是router.leoxxxx.info,方便记忆。

动态域名解析到此结束。然后我们开始配置WAN口的UPnP转发。

为什么要配置这个呢?就是可恶的联通封锁了80端口。所以我们必须要用其他端口了。

这里我配置了2条。一条是路由器192.168.123.1:80端口TCP协议转发到WAN口1234端口。另一条是内网的服务器(就是我那台破Dell电脑,此处可自行换成Lab的服务器)192.168.123.18:22转发到外网的1022端口。方便使用ssh

至此,我们的配置就完成了。

要管理路由器时,在浏览器输入router.leoxxxx.info:1234然后输入用户名和密码即可。

使用网址随时管理路由

如果启用samba和ftp的话,就能够使用ftp随时随地访问自己的私人云盘。此处不需要加端口号。

ftp访问私有云盘

访问服务器(我寝室那台破戴尔电脑)的时候,输入ssh -p 1022 [email protected],而访问路由器本体的时候,则是ssh [email protected],可以通过端口号区分。

另一个好处就是,这样即使ipv6地址变了之后也不怕了(因为我发现桥接之后ipv6地址可能会改变)。我们可以ssh上去直接ifconfig看一下。

这个方案的一个缺点就是开一天的笔记本电脑,每天都要耗费一度电。

所以我打算用导师给的零花钱(此处感谢良心导师!!!)买个树莓派专门运行ss-server程序,就不用笔记本了,开一天也不耗什么电,美滋滋。

至此本文就结束了。

预祝大家 令和年,新年大吉!

Lab里服务器访问互联网的一种可能的解决方案

写这篇文章之前,我刚搭好校内的6to4转换通道。现在正坐在图书馆里用联通网的线路。

记得去年还是前年看到过一个小广告。一个计算机的学长在实验室做了个服务器,跟大家说只要买他的服务,就可以连NEU再挂上VPN得到超快的网速,而不是慢吞吞的校园网。

当时在想,还有这种好事?

现在想想,大概他当时做的就是我这个东西吧…

好了,该说正题了。

联通上网账号的配置

首先,我们需要一个联通的上网账号,破解它的限制,让它能在路由器上使用。

大一的时候破解过一次联通的深澜拨号器,但是当时不懂「闷声发大财」的道理,写了文章大肆炫耀。。。然后被联通主管知道了,几个月之后联通的工程师把深澜加密方式升级成了{SRUN2},当时的方法也白费了。后来一个学弟破解了{SRUN2}的加密,并且写了心跳软件,保证可以可以欺骗联通的拨号服务器。然而好景不长,现在(2019年3月)联通已经采用了{SRUN3}了。

但是生活总是充满戏剧性。

前几天我发现,联通为了保证老用户能够正常使用,其实是允许不同加密方式并用拨号的。即使是今年新注册的用户也可以使用2015版的认证方式。前提是你有当时的拨号软件,然后成功拨号并在联通那里留下了认证记录。

所以操作就很简单了。连上CNC-PPPoE然后使用2015年的拨号器进行正常拨号。

SRUN的2015版MAC下载地址: https://pan.baidu.com/s/1KpKBRERIqAC7PlhPv8Eoig提取码:7ucs

然后打开Console,查看system.log,找到SRUN字段。那个就是被加密的用户名。(注意不要复制到空格)

然后打开terminal,输入ifconfig查看拨号时使用的网卡的MAC地址。

现在我们有了加密之后的用户名,密码(密码就是原密码,不加密的),MAC地址

将这三条数据输入路由器,即可正常拨号联通上网。

这里其实使用学弟的{SRUN2}也可以。但是由于要用到心跳包(即每隔一段时间向联通认证服务器发送数据,伪装成深澜拨号,不然就会断网),比较麻烦。因此采用{SRUN}方法。

6to4通道服务器的配置

这里我用的是一台闲置的笔记本,安装ubuntu 14的桌面版做的服务器。

由于我那台电脑很老,是用电话线(RJ-11)上网的,所以我用的是两个外加的网卡(RJ-45)。一个网卡eth0连接路由器(联通),一个eth1连接校园网。这样我们就能够从校内任意一个角落连接NEU来访问这台服务器了。然后这台服务器再用联通网访问外网。

要实现上述功能,需要配置两个网卡之间数据的转发,让来自eth1的数据从eth0访问外部网络。不然的话会出现找不到DNS路径,导致无法正常访问ipv4站点的问题。

可是,我懒呀 ;- )

于是我把eth1的ipv4那里,从DHCP改成了Disabled,让网卡获取不到ipv4地址。

这样校园网那里只有ipv6了,这样ipv4的流量就自然而然地使用eth0来访问了。(连我自己都觉得自己很机智)

这样配置下来,基本就完成了。

服务器的访问相关

在校内,我们只需要访问其ipv6地址即可。理论上来说,ip地址是可变的。但实际上,之前我的服务器开了半年多了,期间关机和重启无数次,ipv6地址还是不变。

原因就是ipv6地址实在是太多了,远远没有达到两台设备地址冲突的程度。因此学校的网关会记住原先设备的地址。即使是重启也没有关系。

在校外,大部分人没有ipv6地址。所以最简单的办法就是访问联通的ip了(需要提前做好路由器和服务器的端口映射)。一般来说,由于我们是路由器拨号,所以路由器不是突然断电重播,那么ip地址也是不会变动的。如果害怕ip地址变动,可以在路由器那里做一下ddns的解析。这样只需要使用网址即可访问了。

其他一些小细节

路由器那里其实我并不是直接把它连接到eth0的,而是稍微配置了一下。

第一级路由器用来拨号,并且配置了shadowsocks,让它在访问国内网站的时候都直连(Direct)。这样看哔哩哔哩或者AcFun的时候就不会出现地域错误了。然后在访问国外网站的时候均使用代理(Proxy),这样就能看ニコニコ或者YouTube之类的网站了。注意,这里使用的并不是PAC模式,而是IP区分模式!

然后在一级路由下面再接一个二级路由。此二级路由主要是给数据进行加壳,防止联通检测上网人数的。这样上网人数永远是1人了。这一人就是这台二级路由。之后再从二级路由连接服务器的eth0

然后是客户端。我们在校内只需要使用ss访问服务器的ipv6地址,输入正确的密码和加密方式即可。这里甚至不加密都ok。反正校内没有防火墙,不会检测你的数据是否违规。这里ss client使用全局(Global)模式。

这样理论上来说我们就可以愉悦地在图书馆喝着茶,享受高速的联通网络了。

但是且慢!你会发现微信和QQ发不出去。。。。。

这是因为这两个软件懒得做代理设置,走的是直连。由于我们这里没在ipgw拨号,所以当然发不出去了。那么解决方案有两个。

第一种方法是最简单的。就是先关闭ss-client,然后在ipgw拨好号,再打开ss-client的Global模式。这样qq和微信都是用校园网,而其他的软件都是联通网了。

但是,作为一个校园网已经流量超出了几十G的人,怎么可能会善罢甘休呢?

第二种方法就是,使用Proxifier进行配置,建立规则让WeChat和QQ的全部流量重定向到Localhost的1087端口,这个端口是ss-client的HTTP Global Proxy端口。这样就能够把数据中转到服务器上,使用联通上网了。

这篇文章到这里应该就要结束了。在结束之前,我整理了一下网络访问关系图。

整体网络连接图

校内计算机访问服务器以及访问互联网关系图如下

校内访问服务器及访问网络

校外通过联通网络访问服务器关系图如下

校外通过联通DDNS进行访问服务器

校外通过ipv6直连的关系图,略

Hexoって難しい

Hexoって本当に難しいです!!

もう何回もGitしてみましたけど、ウェッブのほうは何も変化もないです!

なんかガッカリ気がします。

ちなみに当時のページ ↓