内网穿透


frp

准备:

一个具有公网ip的主机

官网:

https://open.dingtalk.com/document/resourcedownload/alibaba-cloud-frp-intranet-penetration-tool
https://gofrp.org/docs/setup/

搭建服务端

  • 安装
wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
tar -xvf frp_0.38.0_linux_amd64.tar.gz 
mkdir /usr/local/frp
mv frp_0.38.0_linux_amd64/* /usr/local/frp/
  • 配置
cd /usr/local/frp
vi frps.ini
[common]
bind_port = 7000
vhost_http_port = 80 #监听http的端口

[web-http] 
listen_port=80 # 监听http的端口

# 尽量不要再配置文件中写注释……
  • 启动(非控制台)
./frps -c ./frps.ini
  • 静寂启动
# yum
yum install systemd
# apt
apt install systemd
# 新增脚本 frp_0.48.0_linux_amd64
vim /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.ini

[Install]
WantedBy = multi-user.target
  • 启动命令
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
  • 设置开机启动
systemctl enable frps

搭建客户端

windows http

下载
https://github.com/fatedier/frp/releases/tag/v0.48.0
修改配置文件(http)
[common]
server_addr = myfox.fun
server_port = 7000


[web-http]
type = http
local_port = 9081 
remote_port = 80 
local_ip = 127.0.0.1
custom_domains = myfox.fun

#尽量不要在配置文件中写注释
  • 访问

    http://myfox.fun/api-interfaces/services
    
修改配置文件(TCP)

代理oracle服务

[common]
# 公网服务端的 IP 地址
server_addr = 101.200.135.70
# 公网服务端的监听端口(与服务端 frps.ini 中的 bind_port 一致)
server_port = 7000
# 认证 token(与服务端 frps.ini 中的 token 完全一致)
token = "123456"

# Oracle 代理配置(自定义一个代理名称,如 oracle-tcp)
[oracle-tcp]
# 代理类型:TCP(Oracle 基于 TCP 协议)
type = tcp
# 内网 Oracle 服务的 IP(本地服务填 127.0.0.1,若在其他机器填对应 IP)
local_ip = 127.0.0.1
# Oracle 监听端口(默认 1521,若修改过填实际端口)
local_port = 1521
# 公网服务器上用于映射的端口(自定义,如 15210,需与服务端防火墙开放的端口一致)
remote_port = 1521

linux ssh

  • 下载

    frp_0.48.0_linux_amd64.tar.gz

  • 修改配置文件

    [common]
    server_addr = myfox.fun
    server_port = 7000
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    
  • 启动

    ./frpc -c ./frpc.ini
    

nodeJS

官网

https://theboroer.github.io/localtunnel-www/

使用

npm install -g localtunnel
lt --port 8000

密码

https://loca.lt/mytunnelpassword

显示的就是密码啦

cloudflare

方式一 临时

下载

下载之后,将文件放到path中,可以直接用命令行使用

https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/

登录

cloudflared tunnel login

创建隧道名

注意记录隧道生成的uuid

# 创建
cloudflared tunnel create my-tunnel
# 删除
cloudflared tunnel delete my-tunnel

开启服务

--url:本地服务地址(如http://127.0.0.1:3000https://localhost:8443

--hostname:你的 Cloudflare 域名(如app.yourdomain.com

# 将本地8080端口的服务暴露到你的域名(需已添加到Cloudflare)
cloudflared tunnel --url http://localhost:8080 --hostname test.example.com

方式二 长期

1. 安装 Cloudflare CLI 工具(cloudflared)

  • 访问 Cloudflare 官方下载页 下载 Windows 版本的 cloudflared
  • 解压后将 cloudflared.exe 放入一个方便的目录(如 C:\cloudflared
  • 将该目录添加到系统环境变量 PATH 中(便于在任意命令行窗口调用)

2. 登录 Cloudflare 账号

打开命令提示符(CMD)或 PowerShell,执行以下命令:

cloudflared tunnel login

这会自动打开浏览器,登录你的 Cloudflare 账号并授权。成功后会在 C:\Users\你的用户名\.cloudflared\ 目录下生成证书文件。

3. 创建隧道

cloudflared tunnel create <隧道名称>

例如:cloudflared tunnel create mytunnel

执行成功后,会显示隧道 ID 并在 .cloudflared 目录生成 JSON 配置文件(包含隧道密钥)。

4. 配置隧道

创建配置文件(如 config.yml),内容示例:

tunnel: <你的隧道ID>
credentials-file: C:\Users\你的用户名\.cloudflared\<隧道ID>.json

ingress:
  - hostname: example.yourdomain.com  # 你的域名(需已添加到Cloudflare)
    service: http://localhost:8080    # 本地服务地址和端口
  - service: http_status:404  # 未匹配的请求返回404

5. 将隧道与域名关联

cloudflared tunnel route dns <隧道名称> example.yourdomain.com

6. 启动隧道

cloudflared tunnel --config C:\Users\Administrator\.cloudflared\config.yml run <隧道名称>

7. 验证

访问 example.yourdomain.com 应该能看到你本地 http://localhost:8080 服务的内容。

iptables(未成功)

开启

打开

# 编辑内核配置文件
vi /etc/sysctl.conf

添加后保存

net.ipv4.ip_forward = 1

刷新服务

sysctl -p

设置代理

# 源地址转换
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.21.183.196:8080
# 目标地址转换
iptables -t nat -A POSTROUTING -d 172.21.183.196 -p tcp --dport 8080 -j SNAT --to-source 192.168.1.133

# 让本机发出的访问 localhost:8080 的请求也被转发到 A 服务器
iptables -t nat -A OUTPUT -p tcp --dport 8080 -d 127.0.0.1 -j DNAT --to-destination 172.21.183.196:8080
iptables -t nat -A OUTPUT -p tcp --dport 8080 -d 127.0.0.1 -j DNAT --to-destination 172.21.183.196:8080

# 允许转发流量
iptables -A FORWARD -p tcp -d 172.21.183.196 --dport 8080 -j ACCEPT
# 同时允许 A 服务器返回的流量
iptables -A FORWARD -p tcp -s 172.21.183.196 --sport 8080 -j ACCEPT

文章作者: 张一雄
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张一雄 !
  目录