废话不多说,为什么这样,因为国内的没有固定IP,有固定IP的vps,比如阿里,腾讯这些,带宽太小,还要备案.比较麻烦.实在不适合折腾网站.
为什么不用国外的vps,因为国外的vps 便宜的配置低,但是优点是网络好,固定IP便宜,有ipv4和v6的固定IP. 但是配置垃圾的vps,实在不想折腾了,别说什么性能优化之类的. 我花几天时间去优化一个低配的vps,不如多花点钱堆硬件来的实在.
说到堆硬件,为什么我要用内网穿透技术呢,如下
1. 前几年瞎折腾,买了乱七八糟的各种电脑,服务器,现在放着吃灰,很心疼.放机房吧,一个月千把块的托管费,有那个钱, 我干嘛不去租个vps, 可是租个vps吧,单纯跑个博客什么的.有点浪费.所以把这些闲置的服务器跑起来.
2. 国内各种备案,实在不想去折腾.
3. 国内的固定IP基本不可能,内网穿透是唯一的方案.
缺点如下:
1. IP是国外的,因为穿透的国外的vps. 虽然有点脱裤子放屁的感觉,但是实在找不到好的办法,就是慢点而已. 慢点就慢点,打开网页而已.加了cdn以后,还能接受.
2.破旧的服务器需要一直开着, 开着就开着吧,现在一年也停不了几次电.博客而已,又不是生产环境,无所谓了.
废话说了一堆,开始说下我的技术方案.
- 服务器, 放在家里,也就是家庭宽带. 这个要是去托管, 一个月起码400块钱. 我这个配置都是二手的, 一套下来也就400块钱, 所以性价比很高.
- 网络部分. 服务器安装 ubuntu 18.04, 国外vps 也是 ubuntu 18.04. 为什么用这个, 因为需要安装 tunsafe, centos7/8 都不行, 因为centos7/8 需要额外安装那个clang库, 貌似非常麻烦. ubuntu 直接 apt 即可.为了省事,还是简单粗暴即可.
- 系统架构. cloudflare ———-> 国外vps (haproxy+tunsafe) ————-> 家里的服务器(tunsafe)
3. 为什么用tunsafe
因为tunsafe支持tcp呀! wireguard不支持tcp, 为什么要用udp呢,因为有万恶的墙,也全不是因为墙,因为udp不稳定,经常被干扰.另外用tcp的话,可以用 bbrplus 加速,效果杠杠的.
下面就是具体配置了.
1. tunsafe 的编译安装
1 2 |
git clone https://github.com/TunSafe/TunSafe.git cd TunSafe |
相关配置文件如下
# 国外vps /etc/tunsafe/tun0.conf
1 2 3 4 5 6 7 8 9 |
[Interface] Address = 10.67.71.1/24 ListenPort = 1400 PrivateKey = Key ListenPortTCP=1400 ### Client c1 [Peer] PublicKey = key AllowedIPs = 10.67.71.2/32 |
# 家里服务器 /etc/tunsafe/tun0.conf
1 2 3 4 5 6 7 8 9 10 11 |
[Interface] PrivateKey = key Address = 10.66.71.2/24 DNS = 8.8.8.8 MTU = 1420 [Peer] PublicKey = key Endpoint = tcp://server-ip:1400 AllowedIPs = 10.66.71.0/24 PersistentKeepalive = 25 |
# 创建自动启动文件
1 2 3 4 |
touch /etc/systemd/system/tunsafe@.service mkdir -p /etc/tunsafe systemctl enable tunsafe@tun0 systemctl start tunsafe@tun0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# /etc/tunsafe/tun0.conf [Unit] Description=TunSafe VPN Service - %i Wants=network-online.target After=network-online.target After=multi-user.target [Service] Type=simple User=root WorkingDirectory=/etc/tunsafe EnvironmentFile=-/etc/tunsafe/%i.env ExecStart=/bin/sh -c "/usr/bin/tunsafe start $${dev:+-n $$dev} %i.conf" KillSignal=SIGINT DeviceAllow=/dev/null rw DeviceAllow=/dev/net/tun rw ProtectSystem=true ProtectHome=true [Install] WantedBy=multi-user.target |
2. haproxy 安装