Open solomonxie opened 6 years ago
AWS 的服务海洋里面,EC2是最常见最常用的一个。也就是平时我们租用云端服务器最常用的虚拟主机,可以让你把网站代码、数据库等等全都部署在上面,然后用户直接连接这个虚拟主机。相对于其它aws的邮箱、数据库、语音等云服务来说,EC2是一个大杂烩,也是个通用平台,做什么都行,看自己。
ssh -i "私有密钥文件路径.pem" 用户名@实例的公网IP
其中.pem文件是私有密钥,输入路径即可;
如果是ubuntu的映像,默认用户名是ubuntu
,
如果是AWS定制的映像,默认用户名是ec2-user
;.pem
私钥文件转换为.ppk
文件,
然后在菜单connection -> SSH -> Auth
中,把文件路径填上,
然后回到主菜单点击连接即可。ping某一个服务器,是需要服务器防火墙允许ICMP协议的数据包的。经查阅,AWS的所有服务是默认关闭icmp的。
除独立的Lightsail外,其它AWS服务都可以在安全组中设置防火墙开启icmp。 然而Lightsail的防火墙设置页面,并没有icmp选项,官方也没有任何相关解决方案。
然而发现Lightsail可以在管理后台设置开放端口,如果ping指定的端口,那么还是可以ping通的。如:
ping 192.168.1.123:8888
不管是在DigitalOcean还是AWS的Lightsail搭建ss服务,都有这个问题。 都是出现在我将ip绑定到阿里云的域名之后,在想是不是和阿里云的域名有关系。出现掉线的情况后,无论是ip直连还是用域名连,情况都没有改善,所以怀疑是不是只要在阿里云绑定了域名和ip,就会被更严格的监控到使用ss服务,导致经常掉线。
经过数个月使用发现: 即使不关联任何域名,也会每隔几天掉次线(可能是GFW的随机挂断?) 不过,如果过分暴露服务器(如开放80等常用端口作为Webdav、SMB等服务),好像会更频繁的掉线。
建议在AWS服务器挂固定公网IP,这样的话即使被屏蔽,也能瞬间取消挂载固定IP,恢复正常使用。
每次掉线,建议通过SSH连接,重启SS服务,或者直接重启机器。如果连SSH都连不上,那是真的比较麻烦。需要在AWS后台管理网页点reboot重启。 如果不翻墙无法访问AWS网页的话,那么就到Github上下载个Lantern,用它免费翻个墙登录AWS重启服务器。
根据CloudPing的测试,得出如下结果: 除了加拿大没试过外,其它亲测完全属实,新加坡远快于日本和韩国。
自从今天发现命令行里可以运行ookla的speedtest
,就赶快到自己的树莓派、国外租的主机查看连接网速。之前一直用shadowsocks觉得网速慢的时候,总是怀疑有可能节点没选好,一会儿东京,一会儿新加坡,一会儿加拿大,可还是有问题。
下载速度近500M/s,上传速度150M/s,这是什么级别?!
在网上看到过一个帖子说得很对,不管怎么测试,还有什么比Youtube 1080P更有说服力呢?
看到这个,才明白原来服务器本地访问的速度和上传的速度再快,也敌不过传输过程中的丢失。。 另外,我是在本机连接服务器访问youtube的,我本机的测速是15M/s,宽带的带宽是100M。 此时我本机访问bilibili视频的速度比访问youtube快了一倍,如下:
实际上可以在服务器上安装桌面,然后用VNC
服务从Linux、Mac和Windows等各种地方连接远程桌面。
参考DigitalOcean的这篇攻略。
这里选择的是xfce桌面,非常轻量化,和vnc的配合也很融洽。
第一步:安装 -> 桌面和vnc服务
sudo apt-get update
sudo apt install xfce4 xfce4-goodies tightvncserver
第二步:配置桌面环境
第三步:启动VNC服务
$ vncserver
第一次启动时,会提示你创建一个登录密码和只供浏览用的登录密码。
第四步:开启服务器端口
服务器端口开放需要在供应商的网页控制面板里调整,各不相同。
因为vnc使用的是从5900
端口开始,第1个桌面为5901
,第2个为5902
以此类推。所以就索性设置为5900-5999
之间的端口都开放。
下面的是Lightsail的配置:
第五步:从本地计算机利用vnc访问
每种平台方式不同。Mac上直接在文件夹菜单里的Connect to Server
就可以连上,地址格式是:vnc://USER:IP:5901
引用DigitalOcean的说明:
A local computer with a VNC client installed that supports VNC connections over SSH tunnels. If you are using Windows, you could use TightVNC, RealVNC, or UltraVNC. Mac OS X users can use the built-in Screen Sharing program, or can use a cross-platform app like RealVNC. Linux users can choose from many options: vinagre, krdc, RealVNC, TightVNC, and more.
连接成功:
上面写了xfce桌面,不过样子比较丑,所以想试一试Ubuntu的gnome桌面。 参考阿里云官方参考文章。
Private IP
Private IP
Static IP
can be only applied to SAME region.Linux: $3.5 USD/mo (Lowest) Windows: $8.0 USD/mo (Lowest)
They're free in Lightsail, but it will be charged $0.005 USD/hour for static IPs not attached to an instance for more than 1 hour, which means it will cost 3.6 USD/mo !! That's insane
Refer: What do Lightsail snapshots cost?
$1.00 USD/20GB-mo (Lowest) $0.05 USD/GB-mo.
Snapshot of an instance, CANNOT cross region, but can change zone in the same region.
You can both create a Snapshot
from an instance, or create an instance from a snapshot
.
Refer to: Create a Linux/Unix-based instance from a snapshot in Lightsail
Block storage disks can only be attached to instances in the same region
and zone
.
$0.10 USD/GB-mo. $2.00 USD/20GB-mo.
Scalable
Scale up or down within minutes with disks of up to 49TB– and attach up to 15 disks per instance.
Disk limits:
Block storage disks can only be attached to instances in the same
region
andzone
. The new disk must be the same size or larger than: 8 GB. You can create additional storage disks with a capacity of up to 16 TB (16,384 GB). Your total disk storage must not exceed 20 TB in a single AWS account. You can attach up to 15 disks to a single Lightsail instance, in addition to the system disk. You can only attach a block storage disk to one Lightsail instance.
$18 USD/mo.
Floating IPs are free to use, but it will be charged $0.006 USD/hr for each unassigned, reserved IP.
$5 USD/mo, 250GB storage/mo, 1TB transfer/mo. $20 USD/mo, 1TB storage/mo.
$0.1 USD/GB-mo. $10.0 USD/100GB-mo. $100.0 USD/1TB-mo.
$0.05 USD/GB-mo. $1.00 USD/20GB-mo (Lowest)
On-Demand instances
, you pay for compute capacity by per hour or per second depending on which instances you run.
Spot instances
are available at a discount of up to 90% off compared to On-Demand pricing.
Reserved Instances
provide you with a significant discount (up to 75%) compared to On-Demand instance pricing.
Refer to: Amazon EC2 Spot Instances Pricing
The Spot instance is the spare resources
of AWS computers, that being said, its existence uncertain, it all depends on the market.
The price for a Spot instance is always changing. And the way to use it is to set a maximum hourly price for each instance. When the price hit the limitation you've set, the instance will be automatically TERMINATED!
Hence, it's not good for long term running, but rather for short term computation needs.
For Asia Pacific (Singapore):
- Cluster GPU Instances are not available in all regions.
For Asia Pacific (Singapore):
Data transfer:
Refer to: Amazon EC2 Reserved Instances Pricing
Refer to: Amazon EC2 Dedicated Hosts Pricing
Refer to: Amazon EBS Pricing Refer to Stackoverflow: Cost of storing AMI
远程连接
同一时间只能在一台电脑中使用同一个用户,如果远程是用administrator用户登录的,那么本地的administrator用户就会被弹出。
Windows有内置的远程基础设施,所以可以远程、客户端都可以无需安装任何工具就能连接。
Windows客户端设置:
开始菜单中搜索远程连接
- 选择远程连接 - 输入服务端的IP地址和用户名 - 忽略证书之类的直接登录。
下载rdesktop
:
# 安装
$ sudo apt-get install rdesktop
# 连接
$ rdesktop -a 16 -u [USER] -p [PASSWORD] -f -r disk:name=/home/fz -r clipboard:PRIMARYCLIPBOARD -r sound:local [IP-ADDRESS]
应用商店安装微软官方的Microsoft Remote Desktop 10
(免费).
非常简单非常好用。
AppStore中搜索微软官方Microsoft Remote Desktop
(免费)。用法一样,非常简单
应用只有18M左右,连接非常快,鼠标操作也很简单:直接在屏幕上移动鼠标,两指一起按相当于鼠标右键,还可以两指放大缩小。声音也可以播放,视频也可以看到(比较慢)
Lightsail或EC2都能设置Windows服务器,很简单。
创建好后,默认用户是Administrator
,但是密码要等后台生成才能登录。
Lightsail后台里可以直接在浏览器里打开远程桌面,本地(Mac/Win/Linux)的工具连接也很简单。
有问题的地方是AWS生成Windows服务器的密码问题,它会生成一串随机的默认密码,需要你等待。
但是经常性的密码会无法生成,总显示:
根据网上的经验,如果10-15分钟还没有生成好密码,那等多久也没法生成出来,也就没法登录,需要删除实例再创建,直到能生成密码为止(可以换个windows版本试试)
换了几个region,换了个windows(2012),终于可以出来一个有密码的了。如下:
然后用administrator用户名,和这个密码,简单顺利登录。 桌面很简单,
测试,和一般的windows没什么区别,能正常装软件浏览器,看视频。只不过视频很卡就是了。
另外,同样水准的Windows,网速只有Linux的1/4。而且Windows只对桌面友好,而桌面和GUI的软件有耗费大量内存等资源,所以低配服务器运行还不如自己的500块钱老台式机。
看来低端配置下,果然linux是王道。
参考官网:Create and attach additional block storage disks to your Linux-based Lightsail instances
首先创建网盘并关联到同国同区的服务器上。
注意:一定要记住自己的服务器是哪个国家和哪个区域的,如果不是同样的位置,不能挂载。
然后SSH连接服务器,连接终端输入命令,准备挂载硬盘。
查看新磁盘是否格式化过:
# 查看添加的网盘名称和地址(如/dev/xvdf)
$ lsblk
# 查看网盘的文件系统状况(是否格式化了)
$ sudo file -s /dev/xvdf
如果显示一大堆磁盘属性,包括磁盘格式,那么它已经格式化过了,不用继续格式化了
如果显示/dev/xvdf: data
,则证明是空盘,没格式化过,需要我们做一下
把刚才的新磁盘格式化为ext4
格式:
$ sudo mkfs -t ext4 /dev/xvdf
如果要确认一下是否格好了,再次输入sudo file -s /dev/xvdf
即可。这时就会显示:
现在就能开心的挂载磁盘了:
# 创建一个空文件夹(用来挂载磁盘),最好在根目录下,而不是用户目录
$ mkdir /data
# 挂载硬盘
$ sudo mount /dev/xvdf /data
然后就能正常读写操作了。
但是有一点注意,这个挂载的硬盘只能用sudo
管理员权限读写,为了方便,可以更改一下磁盘的所有者:
$ sudo chown ubuntu:ubuntu /data
最后设置每次重启后自动挂载磁盘,编辑/etc/fstab
文件,添加如下内容:
/dev/xvdf /data ext4 defaults, nofail 0 2
低配的EC2服务器,运行桌面的话极其缓慢,打开什么都会卡半分钟,包括文件夹。看视频就更别想了。而且一般也没什么需要桌面的需求,只是玩玩,知道能GUI桌面登录就好了。
主要步骤如下:
vnc4server
~/.vnc/xstartup
,设置开启哪个桌面等参数注意:
vnc4server
不支持MacOS自带的vnc连接方法,需要安装RealVNC的VNC Viewer一类软件连接。
安装:
$ sudo apt-get install vnc4server
开启/关闭VNC服务的方法:
$ vncserver :1
$ vncserver -kill :1
另外,在使用前,必须要填写VNC的配置文件~/.vnc/xstartup
(比如选择什么桌面之类,根据桌面不同配置也不同),才能正确启动。
参考:How to install graphical Desktop in ec2 instance ubuntu16.04 (Linux) and access from mac
$ sudo apt-get install xfce4
需要配置的VNC文件是~/.vnc/xstartup
文件,全部修改如下:
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
#xrdb $HOME/.Xresources
#xsettroot -solid grey
#startxfce4&
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
sesion-manager & xfdesktop & xfce4-panel &
xfce4-menu-plugin &
xfsettingsd &
xfconfd &
xfwm4 &
配置好后,重启VNC服务,即可登录。
桌面很清简:
ubuntu-desktop
参考:阿里云ECS,Ubuntu Server 16.04安装图形界面远程控制
$ sudo apt-get install ubuntu-desktop
$ sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal
# 退出登录
$ exec sh /etc/X11/xinit/xinitrc.
编辑VNC配置~/.vnc/xstartup
(包括选择默认桌面等):
#!/bin/sh
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &
配置好后,重启VNC服务,即可登录。
桌面非常丑,而且非常慢。
Mac上文件夹里自带的VNC连接,不支持打开vnc4server
生成的远程桌面。所以必须要下载第三方客户端。
推荐用免费简单的VNCViewer
。
登录的话直接在地址栏输入类似:34.231.169.129:1
即可,注意ip后面有个:1
# 新建用户
sudo useradd -m USERNAME
# 改密码
sudo passwd USERNAME
# 给用户管理员权限
sudo usermod -aG admin USERNAME
# 直接Ping
$ sudo ping -c 10 -i 10000 SERVERIP:Port
# iPerf(需要服务端运行"iperf -s",并开放相应端口)
$ iperf -c <IP>
# SSH 连接
$ time ssh ubuntu@IP exit
# 上传下载文件(文件是1M)
$ time scp ~/scptest ubuntu@IP:~/
$ time scp ubuntu@IP:~/scptest ~/
# Youtube下载(5M)
$ time youtube-dl --no-continue --proxy "localhost:1080" -f best,mp4 -o ~/speedtest "https://youtu.be/TO9TS4aGWL4"
Local Average Speed:
Cross Region Expected Speed:
AWS
(Amazon Web Service)Singapore (ap-southeast-1)
Virginia (us-east-1)
Ohio (us-east-2)
Refer to: Google Cloud Platform Free Tier
GCP Free Tier Compute Engine
offers an amount of usage that is free to use, up to a specific limit. These free usage limits are always available even during and after the free trial period. If you go over these usage limits and are no longer in the free trial period, you will be charged according to the price sheet.
Specs:
f1-micro
, worths $0.0035/hr, $2.52/moShared-core machine types:
f1-micro
: 1 CPU, 0.6GB RAM, Preemptible $2.56/mo, standard $3.88/moStandard machine types:
n1-standard-1
: 1 CPU, 3.75GB RAM, Preemptible $7.30/mo, standard $24/moApp Engine B1
: $0.07 per hour, $50.4 per month.
NVIDIA® Tesla® K80
: 1 GPU (12 GB GDDR5), Preemptible $0.135/hr, standard $0.45/hr
NVIDIA® Tesla® V100
: 1 GPU (16 GB GDDR5), Preemptible $0.74/hr, standard $2.48/hr
静态对象存储的意思就是,和FTP差不多,只能上传、下载、删除,不能修改、更新,更不能存动态数据库一类的东西。 虽然还是有很多差别,但是S3和CDN差不多。
为什么不选择可以当硬盘一样随便操作的EBS而是用静态对象存储的S3呢?
S3一样传承了AWS复杂的Cost Calculation。
每月需要上缴的费用主要是这3部分的总和:
几种个人常见案例(月):
也就是说,API请求非常便宜,数据传输可以通过EC2内部传输的免费额度来省钱,最贵的是数据存储费用。这样来算,个人直接用Glacier最划算。
其中比较乱的是传输费用。
参考:Optimizing Costs for S3 参考:10 Things You Might Not Know About Using S3
登录AWS进入S3 -> create bucket -> 创建S3全网唯一名称 -> 默认选项 -> 选择公开数据的浏览权限 -> 完成创建Bucket。
过程十分简单,就不截图占地方了。之后都可以修改,填错了也没问题。
下一步:获取secret_key
,用于之后各种访问。
进入官网: Security Credential
创建key:
选择左侧User -> 为s3创建专门的用户(IAM) -> 输入名称、密码 -> 成功后,获取这个用户独有的key pair -> 记住key pair。
安装客户端(基于Python,强烈推荐Virtualenv中安装):
$ pip3 install awscli --upgrade --user
配置文件:
AWS CLI的配置文件都存在~/.aws
目录中,如果没有可以自己创建。具体的每个配置文件,都是ini
语法,如同git配置文件一样。
登录认证配置:
文件是~/.aws/credentials
,可以配置多项登录用的key pairs:
[default]
aws_access_key_id=YourKeyID
aws_secret_access_key=YourSecretCode
具体的key pair的值,需要到AWS的权限配置中自己添加IAM账户,然后自动获得key pair。
进入官网: IAM - Security Credential
在awscli
的登录验证已经配置好的情况下,可以直接用aws s3
命令进行一系列的操作:
# 列出当前账户下有哪些Bucket
$ aws s3 ls
# 列出指定bucket下有哪些文件
$ aws s3 ls s3://bucket-name/path
# 删除
$ aws s3 rm s3://bucket-name/path/to/file
同步本地和远程的文件夹(方向可换):
#
$ aws s3 cp /path/to/local/file s3://bucket-name/path/to/file
# 下载
# 同步
$ aws s3 sync <source> <target> [--options]
其中sync同步的选项和网页管理后台中显示的选项一样,有很多需要设置的:
--recursive
:--delete
: 删除目标目录中有而源目录中没有的--exclude
: 排除指定的文件和文件夹,语法和.gitignore
一样很简单--include
: 在排除的文件夹里挑出来包括指定的文件和文件夹同步--storage-class
: 存储类型,可以是STANDARD
, STANDARD_IA
, GLACIER
--acl
:注意:Public access
权限必须设置成Everyone
,要不然无法从各种程序访问。
进入bucket的管理后台,选择Permissions
,然后设置Public access
.
安装工具:
# MacOS
brew cask install osxfuse
brew install s3fs
# Ubuntu
sudo apt-get install -y s3fs
具体步骤参考:https://cloud.netapp.com/blog/amazon-s3-as-a-file-system
# Change key pairs to yours
echo ACCESS_KEY:SECRET_KEY > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
mkdir ~/s3-drive
# Mount the aws S3 bucket (replace your uid and gid)
s3fs Your-Bucket-Name ~/s3-drive -o umask=0007,uid=1000,gid=1000
# Show all the mounted devices
mount
# Show what's in the bucket
ls ~/s3-drive
注意,S3的权限问题十分严格。而且每个文件的权限都有可能不一样。
如果是网页上传的,有可能和本地s3fs上传的权限不同,这样就不能互通操作。但是一旦用s3fs
上传全部的文件,那么权限就都是统一的。
一旦文件权限没有统一,那么就会在访问时出现No such file
或Permission denied
问题。
目前解决方案有两种:
x-amz-meta-(mode,mtime,uid,gid)
umask
, uid
, gid
。如-o umask=0007,uid=1000,gid=1000
有几点需要注意:
如何修改header: x-amz-meta-
?
在后台文件管理界面,批量选择文件,然后点Actions,点change metadata,选择x-ama-meta-
,输入对应value。
搜遍了全网,都没找到靠谱的S3转Webdav服务器方案,差点就自己写Webdav的protocol实现了。还好,经过各种换词搜索,灵机一动,换了种思路:可不可以先把S3映射为本地drive,然后再正常把本地drive共享为webdav? 答案是:可以的。
具体做法就是:用s3fs
映射到本地文件夹,再用wsgidav
或apache或nginx将文件夹共享为webdav服务器。
亲测可用,而且十分好用。因为同属AWS资源,同属一个Region区,所以访问速度和访问EBS硬盘感受不到什么区别。
安装(基于Python):
$ pip3 install awscli --upgrade --user
建议在Virtualenv下安装,因为系统级别安装经过测试经常无法安装上。
如同git和docker,awscli
分为入口命令和功能命令,入口命令为aws
,功能命令各自对应一项aws服务。如aws s3
就是针对S3存储的操作。
参考官方所有命令:AWS CLI Command Reference
配置文件:
AWS CLI的配置文件都存在~/.aws
目录中,如果没有可以自己创建。具体的每个配置文件,都是ini
语法,如同git配置文件一样。
登录认证配置:
文件是~/.aws/credentials
,可以配置多项登录用的key pairs:
[default]
aws_access_key_id=YourKeyID
aws_secret_access_key=YourSecretCode
具体的key pair的值,需要到AWS的权限配置中自己添加IAM账户,然后自动获得key pair。
进入官网: IAM - Security Credential
配置好后,就可以直接用aws xxx
命令操作了。awscli
会自动根据你的登录信息,到你的账户查询相关的信息。
S3 静态对象存储
参考官方文档:AWS CLI S3 参考官方文档:Using High-Level s3 Commands with the AWS Command Line Interface
在awscli
已经配置好的情况下,直接可以用aws s3
命令进行一系列的操作:
# 列出当前账户下有哪些Bucket
$ aws s3 ls
# 列出指定bucket下有哪些文件
$ aws s3 ls s3://bucket-name/path
# 删除
$ aws s3 rm s3://bucket-name/path/to/file
同步本地和远程的文件夹(方向可换):
#
$ aws s3 cp /path/to/local/file s3://bucket-name/path/to/file
# 下载
# 同步
$ aws s3 sync <source> <target> [--options]
其中sync同步的选项和网页管理后台中显示的选项一样,有很多需要设置的:
--recursive
:--delete
: 删除目标目录中有而源目录中没有的--exclude
: 排除指定的文件和文件夹,语法和.gitignore
一样很简单--include
: 在排除的文件夹里挑出来包括指定的文件和文件夹同步--storage-class
: 存储类型,可以是STANDARD
, STANDARD_IA
, GLACIER
--acl
:Lightsail是AWS的低端产品,但是又不属于AWS的服务系列,之间交杂不清。所以与AWS的S3之间传输到底怎么算,网上的详细解释很少。根据Lightsail官方FAQ的说法,Lightsail的每个Instance实例都有自己预设的免费传输额,比如最便宜的实例免费额是1TB传输(包括输入输出)。一旦超出1T,那么只对输出收费。但是这个输出指的是使用实例的Public IP输出。也就是说,如果使用Private IP传输,就出入都不收费。但是,只有Lightsail的同Region才能访问到这个Private IP。所以一切在AWS之外的、在AWS内不同区的,都无法访问到Private IP,只能访问Public IP,等同于与Internet传输了。
关于Private IP,参考Lightsail官网:Public IP and private IP addresses in Amazon Lightsail。其中提到,如果要让Lightsail与AWS其它服务进行沟通,需要用到VPC Peering
(Virtual Private Cloud)方法,注意,VPC也是一项单独的AWS服务,是按小时付费的。
参考官网:Set up Amazon VPC peering to work with AWS resources outside of Amazon Lightsail
"A VPC is a virtual network dedicated to your AWS account. Everything you create inside Lightsail is inside a VPC, and you can connect your Lightsail VPC to an Amazon VPC." "Some AWS resources, such as
Amazon S3
, Amazon CloudFront, and Amazon DynamoDB don't require VPC peering to be enabled."
也就是说,从Lightsail访问S3,是不需要启用VPC的。
solomonxie commented on Oct 15
自从十一假日以来(为什么是十一?也许是历史原因?),在Lightsail里创建的新加坡服务器就一直不稳定,shadowsocks断线频率高到每次打开网页都要刷新几次才能刷出来的地步。连基本的SSH都要几次才能连上,换端口完全不影响这个状态,换IP,换服务器,换Shadowsocks算法,换程序,SSH Tunnel,V2Ray(各种配置都试过了),全都不行。外加Cloudflare+Websocket+TLS加持,都没用,这太奇怪了。
一时间懵了。。。。为什么所有东西都试过了,完全不影响这种状态?很奇怪啊。 于是进入了长达两个多礼拜的沉默期,想着忍一忍过去了。直到昨天想到:我还有最后一招,如果这个也不管用就真没办法了——换服务区。 虽然新加坡一直以来是连接大陆最快的线路,但是为了试验,我挑选了次优的日本。
没想到效果出奇的好!日本线路虽然在ping时明显比新加坡慢很多,但是完全没有阻碍、没有屏蔽的话,完全可以忽略那个问题。连接youtube时候"connection speed"一度达到9000 kb/s,真的目瞪口呆。而且无论换哪种shadowsocks算法,或v2ray服务,都没有影响,速度都很快。
所以由此可以得出结论:新加坡服务区整体被盯上了,而且绝对不是破解了某些算法,而是大频率打压一切可疑的连接,甚至打压一切前往新加坡的连接(连最基本的ssh都一样)。
已经很多个月了,每周日都会频繁掉线,无论是是shadowsocks/ssh/v2ray/甚至http连接,都会连接困难,减速等等。换了无数的主机、地区(东京、首尔、新加坡。。)、服务商(aws、Digitalocean等)。 所以问题在,周日,这个问题上。不知道为什么。
如果开着ss,打不开谷歌,那么最先尝试的是用ssh连接。如果连接成功,那么说明服务器和网络都没问题。剩下只是配置的事了。
检查防火墙配置。亚马逊AWS的防火墙是很严格的,所以多半都会卡在这。 如果是AWS的Lightsails的话,直接在Networking配置里,开启全部端口,如下图: 或者谨慎点,在默认配置的基础上,添加自己连接的端口: (注意:这里的Custom处是你在设置/etc/shadowsocks.json时候里面的端口)
还不行的话,就在命令行里主动添加防火墙设置:
# 下载防火墙设置的软件
sudo apt-get install firewalld
# 开启相应的端口
sudo firewall-cmd --zone=public --add-port=你当前服务器的IP地址/tcp --permanent
sudo firewall-cmd --zone=public --add-port=你当前服务器的IP地址/udp --permanent
改好后,就可以通过cat /etc/firewalld/zones/public.xml
这个文件里看到,刚刚的防火墙设置已经生效了。
如果还不行,就试试这招,把ss配置文件的服务器段IP改为0.0.0.0
(如果已经是这个设置则反之设置成服务器IP地址),然后保存,并重启ssserver,sudo ssserver -c /etc/shadowsocks.json -d restart
。如下图:
Security Groups -> Inbound -> Edit -> Add -> Custom TCP Rule, TCP, 8000 - 9000, 0.0.0.0/0
Security Groups -> Inbound -> Edit -> All traffic, All, All, 0.0.0.0/0
AWS的Lightsails在创建服务器时允许运行初始脚本,这个非常方便,省的我一个一个去敲代码了。
以下为脚本内容:
#! /bin/bash
# ---UBUNTU SERVER INITIAL SETUP---
# Notice:
# This script should be run by "$ sudo bash xxx.sh"
# Update server & install essentials
sudo apt-get update -y
#sudo apt-get upgrade -y
sudo apt-get install htop
# Install Shadowsocks & create config file
sudo pip install shadowsocks
sudo cat>/etc/shadowsocks.json<<EOF
{
"server":"0.0.0.0",
"server_port": 1111,
"password":"abc123",
"local_address":"127.0.0.1",
"method":"aes-256-cfb",
"local_port":1080,
"timeout":300,
"fast_open":false
}
EOF
# Auto start Shadowsocks service when system starts
#sudo echo "ssserver -c /etc/shadowsocks.json -d start" >> /etc/rc.local
# Start Shadowsocks server
sudo ssserver -c /etc/shadowsocks.json -d start
不要忘记ssh登录的设置,把本地~/.ssh/id_rsa.pub
的内容复制到SSH Keypair
里面,这样之后就不需要登录密码了。
注意,生成好服务器后,一定要去开启端口才能生效。 方法是: 点击这个服务器页面 -> Networking -> Firewall, 然后添加一个Custom端口,号码为刚刚脚本中设定的端口号码。
另外,如果不是使用Launch Script初始脚本,也可以直接自己用ssh把脚本上传到服务器,再执行。 方法如下:
# 上传shell脚本到服务器用户目录
$ scp ./server-init.sh user@ip-address:~
# ssh进入服务器终端
$ ssh user@ip-address
# 运行脚本
# sudo bash ~/server-init.sh
Google提供了官方版本的Google Drive Stream
,即将Google Drive映射为本地文件夹的工具,但是只提供给Mac和Windows。
但是Google drive stream
不支持personal个人帐户,只支持企业帐户和学校帐户。
对于Linux,Google没有打算制作这个工具。但是有很多第三方工具可以实现,目前最好的是ocamlfuse
。
以下分别讲解安装使用方法。
建议删除本机的Backup and Sync
软件,并删除~/Google Drive
文件夹(如果存在的话).
# 下载工具
$ wget https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg
# 后台挂在dmg镜像并安装
$ hdiutil mount GoogleDriveFileStream.dmg;
$ sudo installer -pkg /Volumes/Install\ Google\ Drive\ File\ Stream/GoogleDriveFileStream.pkg -target "/Volumes/Macintosh HD";
$ hdiutil unmount /Volumes/Install\ Google\ Drive\ File\ Stream/
# 卸载
sudo mv /Applications/Google\ Drive\ File\ Stream.app/ /tmp/
sudo mv ~/Library/Application Support/Google/DriveFS/ /tmp/
配置:
配置文件为~/Library/Preferences/com.google.drivefs.settings
Proxy代理网络设置: 参考官方:Configure Drive File Stream
性能最低,且以CPU积分
的方式计费。
"每台t5实例都有一个基准CPU计算性能,并会根据实例规格以指定速度持续获取CPU积分。每台t5实例一旦启动,就会开始消耗积分以满足需求。当实例实际工作性能高于基准CPU计算性能时,会消耗更多的CPU积分来提升CPU性能,满足工作需求。"
参考:阿里云 突发性能实例 > 基本概念 参考:阿里云 t5性能约束实例
t5实例的规模类型:
所拥有的积分消耗完后,实例的CPU使用率,最大只能为单位CPU占用
,一个单位占用为10%或15%,每种实例规模不同。当然,这个时候可以选择减少CPU使用,来增加积分。
t5实例的约束选项:
单位CPU占用
以内不能使用更多CPU。非约束
后,积分消耗为0后,可以使用超过单位CPU占用
的CPU,但需额外付费。其中,在最便宜的t5 nano实例中,公网IP几乎增加了一倍的成本:无公网IP的实例仅为7元/周。 如果选择不使用系统分配的公网IP,则需要自己购买阿里云
弹性公网IP
: 固定带宽计费的话,最便宜也是8.4元/周。
能选择的最便宜实例:
如果选择不使用系统分配的公网IP,则需要自己购买阿里云弹性公网IP
.
基本上感受是:
总结就是:如果作为个人的”网络中转站“,t5.nano的CPU积分基本上不会超,而且还会有剩余。
我设定的是CPU占用整个小时平均都超过10%就发邮件,于是就频繁收到监控台的警报邮件。 于是检查了下HTOP,发现后台各种阿里云的进程乱飞,实在不能忍啊!最重要是: 让CPU占用超10%的,恰就是阿里云监控台本身!
可以看到,这个服务器我几乎没在用什么,放在那浪费的。只是阿里云自己的服务占用了这么大的CPU资源,这让人怎么想?
就结果来说,可以是相当的失望。比起AWS等国际服务器,在网络的速度、带宽、价格上根本不能比。
本机是北京100MB带宽的宽带,日常下载可高达7Mbps,上传可达1Mbps。
网络通畅下,北京
客户端连接阿里云青岛
服务器:
感受:这种速度和便宜很多的AWS实例,在不被干扰情况下,网速慢了十倍以上。
参考:SaaS vs PaaS vs IaaS: What’s The Difference and How To Choose 参考:怎么理解 IaaS、SaaS 和 PaaS 的区别?知乎
如何快速记忆区分这几个名字?
秘诀:只要记住几个首字母即可:包括I,P,S. 其中I
-Infrastructure; P
-Platform; S
-Service.
后面的话都是统一的aaS
,即"as a service"。后面这个不重要,换成"as a product", "as a f__", "business"什么的,都无所谓。
为什么要提到记忆问题?因为如果不先在脑子里区分这几个单词,那么即使看过类各自代表的意义,第二天也会忘的一干二净。
记住了名字后,我们先要知道这几个东西是在说什么。
IaaS, PaaS, Saas, 都是Cloud Models,即云端项目的模型。 如果你要组成一个在线运行的云项目,必须具备很多组件,如硬件的CPU、硬盘,软件的OS系统,HTTP服务器,数据,应用程序等等。根据app需求,它们的搭配运作肯定是你指定的,也就是“固定”的。
但问题是,各个组件谁来提供?谁来管理?
根据各个组件的提供和管理者的不同,就划分出了不同的Cloud Models
。
简单来说:
On Premises
: 全部自己管。自己买电脑主机,集群,自己装系统装软件,自己更新运维所有Bug。IaaS
: 我们就称它为硬件服务
。商家负责所有硬件部分,你负责所有软件部分。你只需要按期给钱,剩下硬件问题如硬盘坏了风扇不转了,都不需要你管。PaaS
: 我们就称它为平台服务
。商家负责绝大部分,你只需要写app的代码和管理自己的数据库。其它比如OS系统漏洞补丁,网线断了,主机散热什么的,都不需要你管。你只需要按月给钱就行了。SaaS
: 我们就称它为全套服务
。这下好了,连代码都不需要自己写,数据也不用自己找,商家全给足了!你只需要配置下名字,改个Logo,选自己喜欢的功能就够了。其它软件硬件维护更新找Bug,全都不是自己事。比如在线财务报表软件,比如Wordpress博客。这些很好理解。真正用起来,就针对不同的项目不同的细节了,这里不多说。下面就说说各自的特点。
相当于让你租硬件。
优点:
案例: 一般是VPS云服务器提供商。 DigitalOcean, Linode, Rackspace, Amazon Web Services (AWS), Cisco Metapod, Microsoft Azure, Google Compute Engine (GCE)
相当于让你租硬件和系统级软件。
优点:
案例: 一般是具体的云服务提供商。 AWS Elastic Beanstalk, Windows Azure, Heroku, Force.com, Google App Engine, Apache Stratos, OpenShift
相当于让你租软件硬件全团队服务,你只是个给钱的土豪甲方。
优点:
案例: 一般是完整的云应用。 Google Apps, Dropbox, Salesforce, Cisco WebEx, Concur, GoToMeeting
import boto3
s3 = boto3.resource(
's3',
aws_access_key_id = 'S3_ACCESS_KEY_ID',
aws_secret_access_key = 'S3_SECRET_ACCESS_KEY',
# endpoint_url = 'http://192.168.1.70:9000',
endpoint_url = 's3://xxxx/',
)
obj = s3.Object('BUCKET_NAME', 'target_key')
data = obj.get()['Body'].read()
Shadowsocks服务器:
# 使用shadowsocks官方容器
docker run -d --restart always -p 6000:8388 -e METHOD=aes-256-gcm --name "ss6000" \
-e PASSWORD=shadow123 shadowsocks/shadowsocks-libev
记住上面ss对外暴露的是6000端口。
Kcptun服务器:
# xtaci/kcptun 为kcptun的官方容器
docker run --name kcptun -p 6000:6500/udp -d --restart=always xtaci/kcptun \
server -t "$(hostname -i):6000" -l ":6500" -key "kcptun123" -crypt aes \
-datashard 10 -parityshard 3 -mtu 1350 -sndwnd 512 -rcvwnd 512 -dscp 0 -mode fast2
Kcptun也可以暴露同样的6000端口,两者一个用tcp一个用udp,互不冲突,比较好记。
Mac上ShadowsocksX-NG客户端连接:
参考:https://github.com/mritd/dockerfile/tree/master/shadowsocks
# 使用第三方镜像:mritd/shadowsocks
docker run -dt --name ss -p 6000:6443 -p 6000:6500/udp \
-e SS_CONFIG="-s 0.0.0.0 -p 6443 -m aes-256-gcm -k shadow123" \
-e KCP_CONFIG="-t 127.0.0.1:6443 -l :6500 -mode fast2" -e KCP_FLAG="true" \
-e KCP_MODULE="kcpserver" mritd/shadowsocks
Region区域名称:
进入COS Console:https://console.cloud.tencent.com/cos
创建后进入Bucket的主页,在这里进行各种控制:
电脑的客户端强制要求使用key和secret来登录。
除了登录外,使用方法和WEB大致相同:
填写自定义endpoint-url(注意复制的时候不要加上http):
import os
import boto3
from logging import getLogger
import settings
logger = getLogger(__name__)
class S3Operator:
def __init__(self, access_key=None, secret=None, endpoint=None, region=None):
self.client = self.get_s3_client(
access_key or settings.AWS_ACCESS_KEY_ID,
secret or settings.AWS_SECRET_ACCESS_KEY,
endpoint=endpoint,
region=region
)
self.resource = self.get_s3_resource(
access_key or settings.AWS_ACCESS_KEY_ID,
secret or settings.AWS_SECRET_ACCESS_KEY,
endpoint=endpoint,
region=region
)
def get_s3_client(self, access_key, secret, endpoint=None, region=None):
return boto3.client(
's3',
aws_access_key_id=access_key,
aws_secret_access_key=secret,
endpoint_url=endpoint,
region_name=region,
# config=boto3.session.Config(signature_version='s3v4'),
)
def get_s3_resource(self, access_key, secret, endpoint=None, region=None):
return boto3.resource(
's3',
aws_access_key_id=access_key,
aws_secret_access_key=secret,
endpoint_url=endpoint,
region_name=region,
# config=boto3.session.Config(signature_version='s3v4'),
)
def upload_file(self, localpath, bucket_name, object_name=None):
if not os.path.exists(localpath):
return False
object_name = object_name or os.path.basename(localpath)
try:
self.client.upload_file(localpath, bucket_name, object_name)
except S3Exception as ex:
print(ex)
return True
def get_signed_url(self, bucket_name, object_name, expiredin=86400, httpmethod=None):
url = self.client.generate_presigned_url(
ClientMethod='get_object',
Params={
'Bucket': bucket_name,
'Key': object_name,
},
ExpiresIn=expiredin,
HttpMethod=httpmethod,
)
return url
def create_bucket_if_not_exists(self, bucket_name):
existing = [b['Name'] for b in self.client.list_buckets()['Buckets']]
if bucket_name not in existing:
info = self.resource.create_bucket(Bucket=bucket_name)
print('Created bucket:', info)
return self.resource.Bucket(bucket_name).creation_date
def delete_bucket(self, bucket_name):
existing = [b['Name'] for b in self.client.list_buckets()['Buckets']]
if bucket_name in existing:
bucket = self.resource.Bucket(bucket_name)
_ = [key.delete() for key in bucket.objects.all()]
bucket.delete()
def list_objects(self, bucket_name):
keys = [obj.key for obj in self.resource.Bucket(bucket_name).objects.all()]
return keys
参考:https://github.com/aws/aws-cli/issues/1270 参考:http://www.lbtyeya.com/cloud_tencent_/developer/article/1557702
配置文件:
# 此处使用AWS
[default]
aws_access_key_id=abc
aws_secret_access_key=abc
region = us-east-1
output = json
# 此处是使用腾讯云
[profile tencent]
aws_access_key_id=abc
aws_secret_access_key=abc
然后再命令行里
# 列出此region的所有bucket
aws --profile tencent --endpoint-url http://cos.ap-beijing.myqcloud.com s3 ls
# 列出某个bucket的所有文件
aws --profile tencent --endpoint-url http://cos.ap-beijing.myqcloud.com s3 ls --recursive s3://BucketName/
如果想把endpoint-url
加到配置文件里这样就不需要每次都在命令里面指定,这需要安装aws-cli的第三方插件awscli-plugin-endpoint
:
Refer to: https://github.com/wbingli/awscli-plugin-endpoint
pip install awscli-plugin-endpoint
然后在aws配置文件里面加一段这个来指定插件:
[plugins]
endpoint = awscli_plugin_endpoint
整体效果如下:
[plugins]
endpoint = awscli_plugin_endpoint
[default]
region = us-east-1a
output=json
[profile tencent]
aws_access_key_id = abc
aws_secret_access_key = abc
region = ap-beijing
output = json
s3 =
endpoint_url = http://cos.ap-beijing.myqcloud.com
当然,还可以为aws的各个子命令配置不同endpoint:
[profile localstack]
s3 =
endpoint_url = http://localhost:4572
kms =
endpoint_url = http://localhost:4599
lambda =
endpoint_url = http://localhost:4574
iam =
endpoint_url = http://localhost:4593
kinesis =
endpoint_url = http://localhost:4568
logs =
endpoint_url = http://localhost:4586
sts =
endpoint_url = http://localhost:4592
ec2 =
endpoint_url = http://localhost:4597
最后使用的时候,直接指定profile即可:
aws --profile tencent s3 ls
bucket="BucketName"
for f in $(aws --profile tencent s3 ls --recursive --human-readable "$bucket/" |grep 'some_pattern' |awk '{print $5}')
do
aws --profile tencent s3 rm "s3://$bucket/$f"
done
涉及问题