天天看點

frp+nginx内網穿透通路内網服務

作者:Git風去雲往

内網穿透

内網穿透,即NAT穿透,進行 NAT 穿透是為了使具有某一個特定源 IP 位址和源端口号的資料包不被 NAT 裝置屏蔽而正确路由到内網主機。對于沒有公網IP的使用者來說,用現成的内網穿透工具即可,如花生殼、NATAPP、cpolar等。本文主要介紹用frp+nginx實作内網穿透。

frp

frp是什麼

frp 是一個專注于内網穿透的高性能的開源反向代理應用,支援 TCP、UDP、HTTP、HTTPS 等多種協定。可以将内網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。

安裝frp

首先,在frp官網下載下傳安裝包,本文使用frp版本為0.48.0。

用戶端(内網中搭載http服務的主機)和服務端(擁有公網IP的伺服器主機)執行如下指令:

$ wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz
$ tar -xzvf frp_0.48.0_linux_amd64.tar.gz
$ sudo mv frp_0.48.0_linux_amd64 /usr/local/frp
$ cd /usr/local/frp           

修改用戶端和服務端hosts檔案,加入如下配置:

your_server_ip frp.example.com           

服務端配置

修改frp目錄下的frps.ini,加入如下配置:

[common]
bind_port = 7000 # 服務端監聽端口,接收 frpc 的連接配接
token = your_token # 鑒權使用的 token 值,用戶端需要設定一樣的值才能鑒權通過
dashboard_port = 7500 # 啟用 Dashboard 監聽的本地端口
dashboard_user = your_dashboard_user # Dashboard HTTP BasicAuth 使用者名  
dashboard_pwd = your_dashboard_pwd # Dashboard HTTP BasicAuth 密碼
vhost_http_port = 7001 # 為 HTTP 類型代理監聽的端口,啟用後才支援 HTTP 類型的代理,預設不啟用           
别忘了将以上端口加入防火牆白名單,或者關閉防火牆。

用戶端配置

修改frp目錄下的frpc.ini,加入如下配置:

[common]
server_addr = your_server_addr # 連接配接服務端的位址,預設0.0.0.0
server_port = 7000 # 連接配接服務端的端口,預設7000
token = your_token # 鑒權使用的 token 值,與服務端一緻


[web]
type = http # 代理類型,可選值:tcp, udp, http, https, stcp, sudp, xtcp, tcpmux
local_port = 7860 # 本地服務端口
custom_domains = frp.example.com # 伺服器綁定自定義域名,使用者通過 vhost_http_port 通路的 HTTP 請求如果 Host 在 custom_domains 配置的域名中,則會被路由到此代理配置的本地服務           

配置supervisor使frp自啟動

服務端和用戶端執行如下指令:

# 安裝supervisor
$ sudo apt-get install supervisor
$ sudo systemctl start supervisor
# 配置supervisor開機自啟
$ sudo systemctl enable supervisor           

服務端配置步驟如下:

$ sudo vim /etc/supervisor/frps.conf
# 加入如下配置
[program:frps]
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/frp/frps -c /usr/local/frp/frps.ini
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/usr/local/frp/supervisord.log
stderr_logfile=/usr/local/frp/supervisord_err.log
stopwaitsecs=3600
$ sudo supervisorctl update           

用戶端配置步驟如下:

$ sudo vim /etc/supervisor/frpc.conf
# 加入如下配置
[program:frpc]
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/usr/local/frp/supervisord.log
stderr_logfile=/usr/local/frp/supervisord_err.log
stopwaitsecs=3600
$ sudo supervisorctl updat           

nginx配置

服務端執行如下指令:

$ sudo apt-get install nginx
$ sudo vim /etc/nginx/conf.d/proxy.example.com.conf
# 加入如下配置
server
{
  listen 80;
  listen 443 ssl http2;
  # proxy.example.com為外網通路的域名
  server_name proxy.example.com;


  location / {
    proxy_pass http://frp.example.com:7001;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  }
  index index.html index.htm default.php default.htm default.html;


  ssl_certificate    /etc/nginx/conf.d/cert/proxy.example.com.crt;
    ssl_certificate_key    /etc/nginx/conf.d/cert/proxy.example.com.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
   
  access_log  /var/log/nginx/proxy.example.com.log;
    error_log  /var/log/nginx/proxy.example.com.error.log;
}
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ nginx -s reload           

測試内網穿透效果

服務開啟後,在任意浏覽器通路https://proxy.example.com,即可通路用戶端Web服務。

[文章轉載,侵删]

繼續閱讀