frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。

环境:

  • 外网服务器(以下称为A服务器)
  • 内网服务器(vpn-server,以下称B服务器)

搭建方法:

一、vpn-server搭建

1、docker、docker-compose安装,请自行查看官方文档

2、重要: 首先在 Docker 主机上加载 IPsec NETKEY 内核模块:

sudo modprobe af_key

3、使用docker的hwdsl2/ipsec-vpn-server镜像搭建vpn-server,docker-compose.yml配置如下:

version: '2'
services:
  vpn-server:
    image: hwdsl2/ipsec-vpn-server
    restart: always
    env_file:
      - ./vpn.env
    ports:
      - "500:500/udp"
      - "4500:4500/udp"
    privileged: true
    hostname: ipsec-vpn-server
    container_name: ipsec-vpn-server
    volumes:
      - /lib/modules:/lib/modules:ro

4、创建vpn配置文件vi vpn.env,配置信息如下:

# Define your own values for these variables
# - DO NOT put "" or '' around values, or add space around =
# - DO NOT use these special characters within values: \ " '
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password

测试内网ip是否能正常连接VPN,用户名、密码、共享密钥为vpn.env中设置的内容

二、A服务器安装frp

1、下载frp包

wget https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_amd64.tar.gz
tar -zxvf frp_0.13.0_linux_amd64.tar.gz
cd frp_0.13.0_linux_amd64

2、修改配置文件frps.ini

[common]
bind_port = 7000
privilege_token = KEY
privilege_mode = true

privilege_mode启用特权模式,privilege_token特权密钥,你可以修改为任意你期望的密钥

3、创建自动启动服务,路径需要根据你的实际情况修改

vi /etc/systemd/system/frps.service
[Unit]
Description=frps daemon

[Service]
Type=simple
ExecStart=/root/frp_0.13.0_linux_amd64/frps -c /root/frp_0.13.0_linux_amd64/frps.ini

[Install]
WantedBy=multi-user.target

服务管理命令:

systemctl start frps
systemctl enable frps

A服务器配置完成,接下来配置B服务器

三、B服务器安装frp(客户端与服务端有些差异,请仔细看)

1、下载frp包

wget https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_amd64.tar.gz
tar -zxvf frp_0.13.0_linux_amd64.tar.gz
cd frp_0.13.0_linux_amd64

2、修改配置文件frpc.ini

[common]
server_addr = x.x.x.x
server_port = 7000
privilege_token = KEY

[vpn_port1]
type = udp
local_port = 500
remote_port = 500

[vpn_port2]
type = udp
local_port = 4500
remote_port = 4500

server_addr修改为A服务器的ip,privilege_token修改为你的服务端特权密钥;因为vpn需要两个端口(500,4500),协议均为udp,所以需要两个配置。

3、创建自动启动服务,路径需要根据你的实际情况修改

vi /etc/systemd/system/frpc.service
[Unit]
Description=frpc daemon

[Service]
Type=simple
ExecStart=/root/frp_0.13.0_linux_amd64/frpc -c /root/frp_0.13.0_linux_amd64/frpc.ini

[Install]
WantedBy=multi-user.target

服务管理命令:

systemctl start frpc
systemctl enable frpc

至此,所有配置完成,电脑设置vpn连接,正常应该可以正常连接上。如果不能,请检查frps.inifrpc.ini以及防火墙设置是否有错误。