VariantConst
418 字
2 分钟
Frp + Tailscale 内网穿透全记录

近日攻防演练导致 frp 协议被校园网阻断,但包裹一层 tailscale 即可解决。为方便日后配置,特此记录全部细节。

以下内容假设你有内网服务器 A 和公网机器 B,已配置好 A→B 的 ssh 连接,且 B 的 6000 和 7000 端口对公网开放。

1. Tailscale 组网#

访问 tailscale.com,登录后点击 Add device,按照提示在两台机器上分别安装好 tailscale。装好后,网页应该提示 Connected,并显示每个机器的 tailscale 内网地址(以 100 开头)。

Untitled.png

如果是阿里云,100 开头的 ip 段可能被禁,参考Tailscale出口节点无网络问题的调试与分析,在启动 tailscale 时加一个参数解决问题:

tailscale up –netfilter-mode=off

2. 配置 Frp#

资料很多,参考 frp 的 GithubDoc

首先,把 frpc 和 frps 这两个二进制文件分别放到内网机器 A 和公网机器 B 的 /usr/local/bin 下,然后

  • 在内网机器 A 上创建 /etc/frp/frpc.toml,内容为
serverAddr = "B机器的tailscale内网ip"
serverPort = 7000

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
  • 在公网机器 B 上创建 /etc/frp/frps.toml,内容为
bind_port = 7000

在两台机器上分别用 systemd 守护进程,以内网机器 A 上的 frpc 为例,创建 /etc/systemd/system/frpc.service,内容为

[Unit]
Description=FRP Server
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml

[Install]
WantedBy=multi-user.target

然后 systemd 启动四件套:

sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc

公网机器 B 完全同理,只需要把 frpc 换成 frps。

3. 连接#

在任意机器上通过以下命令访问内网机器 A

ssh -p 6000 [A机器用户名]@[B机器的公网ip]
Frp + Tailscale 内网穿透全记录
https://blog.variantconst.com/posts/frp-tailscale-nat/
作者
VariantConst
发布于
2024-06-07
许可协议
CC BY-NC-SA 4.0