在 Vultr上安装 Arch linux

2016/8/2

广告时间

在所有用过的 VPS服务商中,我一直信赖 Vultr,首先是日本线路质量比较可靠,其次价格平民,只要 5$/月(首次还送钱给你),最后就是最重要的,免费送你不限制的 Snapshot功能,让你克隆(备份)整机。

请一定使用!我的链接 来注册试用( 双方获利 💰):bao3的 Vultr 邀请📎,这将资助我一直提供匿名服务。

VPS 操作系统的选择

  VPS有很多系统可选,通常都是用 Linux 的一些发行版,在这些发行版中,有一些虽然用的人多,可是安装软件后期分非常麻烦,例如 Debian 官方源里都是旧软件,这一点也不符合我们长期使用 VPS以及日后升级软件的需求,还有一些则要手动工作量多一点,比如 CentOS,还有活跃一点的 Ubuntu,但 Ubuntu多数是 deb分发,也不利于我们自定义。综合了很久,最后我将的 VPS操作系统从 FreeBSD 换到了 ArchLinux。这两个系统虽然分属于是 BSD-like Unix 和 Linux,不过理念非常像,有非常完备的官方手册,足以解决我们日常的问题。

所以下面的部分都是使用 ArchLinux 来进行,而这个系统是 Vultr 官方所以不支持的,所以此文的目的就教你如何在 Vultr 上使用 ArchLinux 。

你的收益: 一次付出,子嗣无忧 

下载 iso安装盘

登录你的 Vultr ,请不要关键是去点下图中的 “Deploy New Instance”,我们要先准备光盘,所以请你点击 💿ISOs 输入 iso的地址,让 Vultr给你下载好。
downloadISO
  ArchLinux 的光盘下载网址 https://www.archlinux.org/download/ ,找到你想要的节点,点进去,复制 ISO的 URL
  
  

比如我使用的地址:
http://mirror.rackspace.com/archlinux/iso/2016.01.01/archlinux-2016.01.01-dual.iso

然后粘贴到上面 💿ISOs 这个里面,这样 Vultr 就开始帮你下载了。

创建系统

  点击上图中 Deploy New Instance 一个新的。

  1. 建议你使用 SSD套餐
  2. 千万不要选 SATA (更多存储空间)那就郁闷了,因为有可能会莫名各种小毛病,影响后面的安装,会死得很惨
  3. 并且 SATA套餐不能使用 Snapshot 免费备份功能而 SSD可以,基于此,相当于多了一个免费的备份镜像,数据是数据是无价的。

 
  选择系统时,使用你刚才下载的 iso ( Custom > My ISOs > archlinux-XXXX.iso ),在创建好之后系统根本不会自动安装好 Arch Linux,只不过是用光盘启动了而已。

vultrdeply

开始安装

  我相信你应该是一个具有动手能力的人,因为接下来的安装需要使用很多命令行指令。请在 VPS控制台 上选使用 VNC Console的方式来使用新创建的 VPS。

硬盘分区

  整个安装过程中最核心的地方就是硬盘分区。原因在于 Vultr是基于 KVM的虚拟机,而我们又是用的 SSD ,所以是基于 BIOS + GPT的系统。而在默认情况下咱们的引动器 Grub只能支持 BIOS+ MBR 或者 EFI + GPT 的方式。Vultr 恰是个混合模式,会导致 Grub不引导的。

1. 首先我们必须分出一个 bios安装分区,用于存放存放标准的 Grub 的引导文件。

2. 如果你要承载 Web类服务,例如网站或者私有云 ( owncloud),那么我们最好单独分一个 Swap 。

3. 默认情况下我们直接使用剩余的 SSD 作为整个系统磁盘,不单独分区了。

正面就开始咯:

 gdisk /dev/vda
 n
 回车 (屏幕显示 1-28,Default 1 )
 回车 (屏幕显示 default = 2048, or {+-}size )
 +2M
 EF02 (类型代码默认为 8300,要手动改)

截图如下:VultrEF02

  剩下的空间就是你自己自由支配,我的就仅供参考(与平时的分区没有区别),注意看图片中一定会有一个 BIOS 分区,另外图片中冒号后面是空白的都表示是直接按了 回车,这是成功的关键:

VultrSSD

  当然最后还要写盘,这个我就不说按哪个键了。

开始安装

  分区已经分好了,并且已经使用 ISO光盘启动了,接下来就是分区了,Arch Linux也有类似于 FreeBSD的交互式安装过程,不过在这里还是要用手动的过程,毕竟我也是第一次安装 Arch Linux 。 Vultr因为可以使用镜像来克隆,所以一次安装,永远安逸。

  不过你需要注意的是,如果你的分区跟我不太一样,那接下来的步骤你需要有些调整,通常的调整就是 /dev/vda1 /dev/vda2 /dev/vda3这些编号有所不同。我只会依照我的来写。

 mkswap /dev/vda2 -L SWAP
 swapon /dev/vda2
 mkfs.ext4 /dev/vda3 -L ArchOS
 mount /dev/vda3 /mnt

  好了,至此所有准备工作都已经完成了,我们开始安装系统核心了。


pacstrap /mnt base base-devel net-tools

  这是要安装基本系统以及一些必要的套件,其中 net-tools是我额外加上的,因为这样可以在安装完使用诸如 ifconfig nslookup等等的小工具。经过等待(*通常为 2分钟 *左右),系统就已经完全OK了。

  不过此时的系统还没有引导器 bootloader ,因此我们需要为系统安装一下:


arch-chroot /mnt
pacman -Sy grub
mkinitcpio -p linux
grub-install /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg

配置网络连接

  1. 其实操作上来说,以上安装就已经可以重启你的 VPS 享受乐趣,不过在此之前,先要做一些小的配置。

配置DHCP,这一步比较简单,在你的命令行下接着输入:
systemctl enable dhcpcd

或者是

systemctl enable dhcpcd@eth0

通常你会看到 ( Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpcd.service to /usr/lib/systemd/system/dhcpcd (或者@eth0).service.)

  1. 重启前,记得使用 passwd 修改一下你的 root 密码,以利于下一步 ssh从你的 PC上登录,摆脱网页登录的烦恼,请一定要记住此密码,这是用来管理系统的密码切记。

    passwd
    

    输入你的密码,在你输入的时候是不显示密码的,但是不用担心,这是 Linux / Unix 机制造成。

  此时你修改的是 Root 用户的密码,但我们平时不应该使用此用户来登录,所以你需要创建一个普通用户以及设置用户密码,这个用户名及密码将会是你远程连接 VPS所使用的。使用用户 mylove 登录后,需要使用 sudo 来执行系统管理命令
  
  useradd -m -G wheel -s /bin/bash mylove
  passwd mylove
  


OK,启动你的机器试一下吧,并使用 mylove 登录一下吧!


远程连接

在机器重启的过程,你也不必闲着,准备一个工具,从现在开始,我们要用自己的电脑客户端来连接。如果你是 Linux / Unix / Mac ,就直接使用终端 ssh 命令 如果是 Windows 就使用 Putty 或者 Xshell ,两者都是免费的。

提醒,SSH 连接涉及你的服务器安全,请一定要去官方网站下载工具,不要去网上找什么汉化版、修改版,以免这些工具利用你的 ssh 连接获取你的服务器密码、植入木马、作为攻击跳板等

针对 Mac ,打开 终端,输入

ssh mylove@your.vps.ip.address

  使用你的 IP 地址替换后半部分,连接时会询问你是不是要添加 ( yes/no ),你就选 yes 。然后会让你登入普通用户 mylove 的密码,登入成功后,可能 再接着输入 su - 从成变身成管理员( 需要你输入管理员密码 )。

  • 安装后有还有些额外调整,但不是必需的例如 hostname, locale, timezone,你完全可以不设置重启后再慢慢调整
  • 以下命令是用于设置时区及改 VPS 主机名称,另外优选最快的软件安装源,井号 ( # )的部分不会影响命令执行,你可以直接复制粘贴的。

    rm /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #设置时区
    hostnamectl set-hostname vps-jp  #设置主机名称叫 vps-jp
    
    

安装 yaourt

这部分是额外的设定,ArchLinux 使用 pacman来管理包,但是有时候这些包更新慢,我们可以使用___yaourt___ 来代替,可称为神器。我们需要修改 /etc/pacman.conf,使用 nano /etc/pacman.conf (你也可以使用 vi ) ,在文件最后加入以下代码:

[archlinuxfr]
SigLevel = Optional TrustAll
Server = http://repo.archlinux.fr/$arch

Control + X 保存( 选择 “yes ” ) ,并退出

然后使用 pacman -Syu yaourt 安装。此后,你就可以使用普通用户 mylove 登录然后直接 yaourt -Sy 软件包名称来帮你安装所需的软件, Enjoy~ it !

完结

额外的软件

  这一部分主要是用来介绍如何安装一些常用软件,本身并没有想作为本文的主要内容,不过我想我就作为自己备忘来记录,如果你看不懂,甚至调试有问题, sorry 憋人不提供解答 💋。

shandowsocks Strongswan Ocserv

  安装过程非常简单,切换到普通用户 mylove 下,输入 yaourt -S shadowsocks-libev strongswan ocserv 然后就开始问你一些问题,然后就开始编译了,你根本不必担心什么,因为这是绝大多数用户都验证过的配置。只是你要看清楚问你的问题是“编辑 PKGUID”( 选 n)还是问你“是否继续构建” (选 yes),然后就会问你是否要安装。
  

备份你的 VPS

  尽管你已经安装好了这些必备软件,但是请不要急着从网上找资料来配置它们,你首先要做的就是备份。记住,数据是无价的,而如果因为配置错了浪费太多重建时间更是无价的。
  Vultr 默认开放一个非常好用的主机克隆服务,叫“快照” Snapshot ,目前是免费向 SSD硬盘用户开放,所以你打开网页,先备份一下吧
  登录你的 VPS,点击 Snapshots
  

  你需要等待好久。。。。。所以请起身看看你的娃或者喝杯🍻。

配置你的防火墙

  要想使用 VPS必须要开防火墙,而且防火墙还有另一个用处,就是 VPN功能一定要依赖防火墙。为了避免太麻烦,我直接发我的配置。你可以自己导入

# Generated by iptables-save v1.4.21 on Mon Jan  4 16:27:39 2016
*filter
:INPUT DROP [267469:59409891]
:FORWARD ACCEPT [1527284:116084980]
:OUTPUT ACCEPT [551995:57041906]
:sshguard - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m comment --comment "Allow Localhost Access" -j ACCEPT
-A INPUT -p tcp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -m comment --comment "SSH/ HTTP/ Shadowsock/ IPSec/ Ocserv " -j ACCEPT
-A INPUT -p udp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -m comment --comment "SSH/ HTTP/ Shadowsock/ IPSec/ Ocserv " -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22000,60223,21025,33925,33452 -m comment --comment "Syncthing TCP port" -j ACCEPT
-A INPUT -p udp -m multiport --dports 22000,60223,21025,33925,33452 -m comment --comment "Syncthing UDP port" -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -i eth0 -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -m limit --limit 5/min --limit-burst 7 -j LOG --log-prefix "Drop Sync"
-A INPUT -i eth0 -f -m limit --limit 5/min --limit-burst 7 -j LOG --log-prefix "Fragments Packets"
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -m recent --update --seconds 15 --name DEFAULT --mask 255.255.255.255 --rsource -j DROP
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -m recent --set --name DEFAULT --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m multiport --dports 60000:61000 -m comment --comment "Mosh server" -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 1701 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j sshguard
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -o eth0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m comment --comment "Allow Localhost output" -j ACCEPT
-A OUTPUT -p udp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -j ACCEPT
-A OUTPUT -p tcp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Mon Jan  4 16:27:39 2016
# Generated by iptables-save v1.4.21 on Mon Jan  4 16:27:39 2016
*mangle
:PREROUTING ACCEPT [649046914:490030784988]
:INPUT ACCEPT [458980340:332669236268]
:FORWARD ACCEPT [190065337:157361240288]
:OUTPUT ACCEPT [367048723:407521818509]
:POSTROUTING ACCEPT [557343262:564902311503]
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Mon Jan  4 16:27:39 2016
# Generated by iptables-save v1.4.21 on Mon Jan  4 16:27:39 2016
*nat
:PREROUTING ACCEPT [2700413:236807688]
:INPUT ACCEPT [1160470:78636937]
:OUTPUT ACCEPT [1142833:89039918]
:POSTROUTING ACCEPT [224659:13609002]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Jan  4 16:27:39 2016

  将这段代码在你的 VPS 里新建一个文件 nano ~/firwall.txt ,然后粘贴进去。然后使用 iptables-restore < ~/firwall.txt
  以上的这个规则默认拒绝所有连接到你的 VPS的请求,只保留常用的端口,由于我的 shadowsocks使用 4689端口,因此我开放了这个特别端口,你可以改成自己的;同时,系统自动建立 nat,你可以自由地在你的 strongswan (前面刚安装的)里配置任意的 IP地址段,也可以在 ocserv里配置了。
  

配置Shadowsocks-libev

  我特意安装了这个版本,你不必担心,这货只是 Shadowsocks众多分支里我觉得非常不错的一个,而配置文件则是完全相同的。
  nano /etc/shadowsocks/config.json ,然后粘贴上代码:

{
    "server":"0.0.0.0",
    "server_port":4698,
    "local_port":1080,
    "password":"YourPasswd",
    "timeout":60,
    "method":"aes-256-cfb"
    }

  注意, 4698 要改成你自己的,并且要与防火墙里的配置相对应,至于 local port:1080 这个不起任何作用,仅当你用作客户端时才有用,但是保留它的好处是,你可以直接把这个配置文件复制到你电脑的客户端使用。
  接下来就是设置 Shadosocks的开机自动启动。ArchLinux的牛逼之处就是全程使用 systemd管理,非常省心。代码就是:

systemctl enable shadowsocks-libev@config #开机启动
systemctl start shadowsocks-libev@config  #立刻启动

systemctl restart shadowsocks-libev@config  #重启(用于改过配置)
netstat -npl | grep 4698   #查看配置有没有成功
ss | grep 4698    #查看有没有客户端成功连接

  
  以上代码直接复制执行就可以了,截图如下:
  

剩下的工作就是你自己配置你的客户端,当客户端连接时,就在上面的图里就能看到了(图片的最后三行)

Strongswan 配置

  接下来的这部分我就不多说了,非常麻烦,所以我只贴我的配置咯,入门级的教程你可能需要问别人啦~
  
  这是一个麻烦,因为涉及太多了,而且每个人配置还不一样,比如我始终只使用证书认证,最后被迫开放了密码认证。所以这里可能不见得每个人都一样,你一定不要惊讶。主要涉及到了的配置文件就是 strongswan.conf, ipsec.conf,ipsec.secrets 。
  首先编辑 strongswan.conf 加入 i_dont_care_about_security_and_use_aggressive_mode_psk = yes
duplicheck.enable = no 这两项一个是让你可以使用 ipsec + 密码来上网,一个是为了允许同一个用户名(或者证书)在多个终端登录。

算了,想了想,还是不写配置了,好累。

改天补齊