邻近回家,面对着怎么都调不通的代码,一点心情都没有。然而又想着 “回家之后怎么杀回校内网” 的事儿。正好晚上搞一下。
在 V2Ray 群里吐槽好久说希望加上内网穿透,小姐姐一直说“再等等……”,然后有人看不下去了:“自己去试 frp 啊!”
Background
学校对网络管的比较严,虽然 10.0.0.0/8
段内网里面几乎任意主机都可以互通,但是对外就不一样了:目测是有一台堡垒机当作统一出口,然后对内网已报备的几台服务器做常用端口映射。虽然校园网有 IPv6,但是禁止了 22 口的入站(换成其他口就好了)。IPv6 对于运营商网络来说仍是稀有物品,而且速度不怎么好,寝室连学校,最高 500K 的样子。想使用 V2Ray 的特殊手段连进来,都失败了。SSH 端口转发一直断线,而且晚上 3 点会强制下线。目前最好的办法就是 TeamViewer,非商用的话一小会儿就断掉了。总之不是长久之计。
其他方案的话…… 花生壳?太阳花?nat123?国内非开源不太信任。
被安利 frp 之后就去搜了一下。文档蛮全的,感觉还挺简单的。而且一次成功。
首先去下载最新 Release,解压缩,之后为 Server 端和 Client 端分别进行配置。
Server 端
按照“惯例”,把 frps
放在 /usr/bin
里面。然后新建 /etc/frps/
,在里面新建一份配置文件 frps.ini
自己的需求比较简单,只是希望能在外网访问自己电脑而已,所以 中文文档 里面的很多高大上的东西都用不上,只用上了最最前面的端口转发。配置如下
[common]
bind_port = 7000
log_level = warn
没了……Server 端就是这么简洁……
再搞个服务,每次开机自动启动:
sudo vi /lib/systemd/system/frps.service
[Unit]
Description=FRP Server service
Require=network.target
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User=root
Group=root
GuessMainPID=yes
ExecStart=/usr/bin/frps -c /etc/frps/frps.ini
ExecReload=/bin/kill -s QUIT $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl enable frps
sudo service frps start
Client 端
复制 frpc
到 /usr/bin/
,新建配置文件 /etc/frpc/frpc.ini
同样是只用基础功能,所以配置依旧很少:
[common]
server_addr = YOUR_SERVER_IP_HERE
server_port = 7000
log_level = warn
login_fail_exit = false
user = YOUR_COMPUTER_NAME_HERE # 这里给自己电脑起个名字
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = WHICH_PORT_DO_YOU_WANT_TO_USE
注意替换一下信息。之后依然是建个服务自动启动:
sudo vi /lib/systemd/system/frpc.service
[Unit]
Description=FRP Client service
Require=network.target
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User=root
Group=root
GuessMainPID=yes
ExecStart=/usr/bin/frpc -c /etc/frpc/frpc.ini
ExecReload=/bin/kill -s QUIT $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl enable frpc
sudo service frpc start
就这样就完了!
在外网上试一下 ssh username@YOUR_SERVER_IP -p YOUR_PORT
,然后输入个 ip a
看看是不是内网的 IP 地址?
如果使用 5900 口的话就可以 VNC 了哦~
一些小坑
login_fail_exit = false
可以保证 Client 一直尝试连接 Server,而不是“连接失败就报错退出”。- 注意到 client 的
user
,建议还是设置一下吧。 - client 里面所有的小标签
[xxxx]
不能重名。(ini 的特性,同时好像根据小标签名来区分不同链接) - 目前暂时不支持“每个连接分别使用一个服务器”这样的“双保险”
- 中转服务器最好放在国内。为啥?为速度啊!
发表回复