等到IPV6和5G(678910G)普及了,才真的叫互联。
一个公网IP就可以带来很多完全别样的感受
一般来说,HomeAssistant都是运行在家中的网络中,LZ想了想似乎没啥特别的需求要在外面访问它。
LZ家中用的北京联通,有公网IP(自己申请的)。老家的中国电信也有公网IP(也是一个电话到客服就行)
这样一来就可以做很多事情。
一.北京出租屋:
1.小米路由器3G,刷Padavan,
2.北京联通宽带,公网IP(可以申请),破解光猫取得超级权限,开桥接(淘宝远程,几十块钱)可以双开,即获取两条线路和两个ip,然并卵,lz就租了个主卧。没那么多需求
- 光纤接光猫,光猫LAN口拉网线到小米路由器WAN口。在路由器里拨号。
- 显示器HKC C340(34寸,21:9 100hz)
- PS4 pro 不支持21:9 ,网线接路由器,NAT2的连接类型。
- PS4输出HDMI接一个音视频分离的设备,即一边是HDMI, 另一边是HDMI,和3.5mm音频。不这样做PS4没声音。
- PC,网线接路由器,DP接显示器。PC挂了三个固态和两个机械。分别装了windows,macOS和Ubuntu。macOS买了个有线蓝牙加网卡,隔空投送很安逸。就是最新的系统不支持N卡了。
- 有线蓝牙音箱Bose Soundlink Mini2,音频口接一个二分转接口,一个接PS4,一个接PC。可以同时播两路输入。叠加在一起。
- 信号切换器(DP+HDMI+miniDP输入,HDMI输出)。没有用。因为PC只能用DP才能获得全分辨率+100Hz。
- 支持iOS的MFI手柄,xbox one手柄
- Surface GO
- iPad, iPhone
单位
13. 笔记本,装FRP客户端bat自启,在任何地方可以应急访问。手机通过远程桌面看看公司笔记本摄像头什么的
14. PC(基本不用)
15. 瞎眼显示器
16. Xbox one手柄
- iOS和PC都装了Moonlight串流工具,PS4官方串流工具(iOS得切到非大陆账号)。 iOS还装了r-play(国区商店有,68rmb)
- NVIDIA串流需要打开(默认关闭)
- Steam串流(好像只能局域网)
路由器上面
20. ss (买了VPS)
21.FTP+SMB+NFS
22.VPN(PPTP)
二.老家:
1 路由器设置相同
2 中国电信+公网ip
3 路由器DMZ电脑的ip
4 iPad iPhone
实现功能:
1.iOS装nplayer(十几块钱好像)可以在任何地方直接访问家里的移动硬盘看电影,非常流畅。
2.于是我妈想看啥告诉我就直接下载,lz在教育网有ipv6可以下载,然后直接拖进硬盘(远程拖每秒10M左右)相当于通过公网ip造了一个私有的视频点播网站。无广告又高速233333 nplayer真的太好用了,支持各种协议
3.Potplayer建远程专辑看,或者windows资源管理器映射远程磁盘
4.PS4 Pro在公司PC远程串流玩。装了VDX驱动和映射, 直接用xbox手柄即可,也可插usb接ps4手柄。
5.在公司远程moonlight串流家里PC的steam
6 远程家里桌面。有公网ip加持,几乎体会不到是远程桌面,和在本地体验是一样的。lz远程剪辑视频也毫无差别感。
7 手机也有远程mstsc官方工具
8 在家中趴床上用surface go串流(坑,surface go高配版串流很卡,同样网络下e520就完美,iPad也可以)
9 老家电脑有问题,直接mstsc输入域名即可秒连。
10 公司也可以直接连vpn到家里,获取了一个子网地址,但是steam串流好像仍然检测不到。
-
背景
使用https将本地的HomeAssistant服务转发到公网上,实现远程https和无端口访问。当然也可以转发任意其他服务。
阿里云ECS Ubuntu 16.04 分配有公网IP <A.B.C.D> //有公网IP的服务器均可
本地树莓派在局域网内运行HomeAssistant <192.168.1.233:8123>
网上教程比较杂乱。专门针对HomeAssistant的还没有。于是我尽可能详细的写一下。如果有问题可以回帖交流。
FRP介绍:
直白的说的话,
frp有服务端frps和客户端frpc。
服务端一般运行在有公网IP的机器上,如云服务器、VPS等。
frpc可以放在任意能联网的设备上面,但本身不必具有公网地址。比如树莓派、电脑等等。进行ssh、远程桌面等访问。一个服务端可以有多个客户端。
因为公网ip是在任何地方都可以访问的到的,
而且通过frp的服务,通过服务端又可以访问到任意的客户端。
这样就实现了你在任意能联网的设备上,通过访问公网ip,来访问任何运行了frpc客户端的设备。
- 安装配置FRPS
项目地址:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
在ECS上执行:
cd ~
mkdir software
cd software
wget [url=https://github.com/fatedier/frp/]https://github.com/fatedier/frp/[/url] ... _linux_amd64.tar.gz
tar -xzvf frp_0.22.0_linux_amd64.tar.gz
mv frp_0.22.0_linux_amd64.tar.gz frps
cd frps
nano frps.ini
frps.ini 文件配置:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 7080
vhost_https_port = 7443
dashboard_port = 7500
dashboard_user = your_account
dashboard_pwd = your_pwd
authentication_timeout = 900
token = your_token
frps开机自动启动:(引用:FRP自启动)
cd ~
apt install supervisor
cd /etc/supervisor/conf.d
nano frps.conf
frps.conf文件内容:
[program:frp]
command = /home/software/frps/frps -c /home/software/frps/frps.ini
autostart = true
重启supervisor
systemctl restart supervisor
查看supervisor运行状态
supervisorctl status
- 安装配置FRPC
在本地运行HomeAssistant的树莓派上执行:
cd ~ mkdir software cd software wget https://github.com/fatedier/frp/... _linux_amd64.tar.gz tar -xzvf frp_0.22.0_linux_amd64.tar.gz mv frp_0.22.0_linux_amd64.tar.gz frpc cd frpc nano frpc.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 7080
vhost_https_port = 7443
dashboard_port = 7500
dashboard_user = your_account
dashboard_pwd = your_pwd
authentication_timeout = 900
token = your_token
frps开机自动启动:(引用:FRP自启动)
cd ~
apt install supervisor
cd /etc/supervisor/conf.d
nano frps.conf
frps.conf文件内容:
[program:frp]
command = /home/software/frps/frps -c /home/software/frps/frps.ini
autostart = true
重启supervisor
systemctl restart supervisor
查看supervisor运行状态
supervisorctl status
- 安装配置FRPC
在本地运行HomeAssistant的树莓派上执行:
frps.ini 文件配置:
[common]
server_addr = <A.B.C.D>
server_port = 7000
token = your_token
[homeassistant]
type = tcp
local_ip = 127.0.0.1
local_port = 8123
remote_port = 9000
custom_domains = your_website.com //自己的域名,并且解析到ECS的公网IP
- 安装配置NGINX
在ECS上执行:
cd ~
cd software
apt update
apt upgrade
apt install nginx
#NGINX开机启动
systemctl enable nginx
#NGINX的配置文件在/etc/nginx下
cd /etc/nginx
cd sites-enabled
#新建一个配置文件,文件名可以为网站的域名
touch your_website.com
nano your_website.com
在阿里云申请域名ssl证书:
your_website.com文件的配置:
server {
listen 80;
server_name your_website.com;
location / {
rewrite ^ https://your_website.com$request_uri? permanent;
}
}
server {
listen 443;
server_name your_website.com;
ssl on;
ssl_certificate cert/your_website.com.pem;
ssl_certificate_key cert/your_website.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-For $remote_addr;
location /api/websocket {
proxy_pass http://127.0.0.1:9000/api/websocket;
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade';
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_buffering off;
proxy_pass http://127.0.0.1:9000;
}
}
#检查NGINX配置文件是否正确 nginx -t #加载NGINX配置文件 nginx -s reload
[common]
server_addr = <A.B.C.D>
server_port = 7000
token = your_token
[homeassistant]
type = tcp
local_ip = 127.0.0.1
local_port = 8123
remote_port = 9000
custom_domains = your_website.com //自己的域名,并且解析到ECS的公网IP
- 安装配置NGINX
在ECS上执行:
cd ~
cd software
apt update
apt upgrade
apt install nginx
#NGINX开机启动
systemctl enable nginx
#NGINX的配置文件在/etc/nginx下
cd /etc/nginx
cd sites-enabled
#新建一个配置文件,文件名可以为网站的域名
touch your_website.com
nano your_website.com
在阿里云申请域名ssl证书:(可参考:为阿里云域名配置免费SSL支持https加密访问简单教程 )
your_website.com文件的配置:
server {
listen 80;
server_name your_website.com;
location / {
rewrite ^ [url=https://your_website.com]https://your_website.com[/url]$request_uri? permanent;
}
}
server {
listen 443;
server_name your_website.com;
ssl on;
ssl_certificate cert/your_website.com.pem;
ssl_certificate_key cert/your_website.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-For $remote_addr;
location /api/websocket {
#端口写的和frpc.ini中一致
proxy_pass [url=http://127.0.0.1:9000/api/websocket;]http://127.0.0.1:9000/api/websocket;[/url]
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade';
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_buffering off;
proxy_pass [url=http://127.0.0.1:9000;]http://127.0.0.1:9000;[/url]
}
}
5.访问https://your_website.com