在 Linode 上运行 Windows

自从 Linode 支持 KVM 后,按理说运行 Windows 是可行的,一篇 官方博客 也非常模糊地印证了这一点,因此准备上手折腾一下。

如果在网上搜索,不难找到一些制作好的 RAW 镜像,直接用 dd 把镜像烧录好,把虚拟模式设置为全虚拟后即可顺利启动。然而问题有两个,第一是我不相信别人做好的镜像;第二,也是最重要的一点,这些系统是运行在全虚拟模式下的,性能比半虚拟差一些,尤其是虚拟网卡,全虚拟时是模拟成 Intel 千兆网卡,半虚拟时是 VirtIO 的万兆网卡。具体的差别,请参考 这篇文章。我希望自己制作一个适用于半虚拟模式下的镜像,由于网络带宽小,从本机向云端传输动辄数 GB 的镜像很不实际,因此我尽量用最小的花费把所有涉及大量传输的操作都转移到云端进行,最后还要把镜像打包好方便下次使用。

是否合法

windows-on-linode-1.png

我为此专门开 Ticket 咨询了客服,答案是可以运行,前提是系统必须正版。

准备镜像

我选择把 Linode 开在 Fremont 区,打算用 Los Angeles 区的 Vultr 服务器准备镜像。Vultr 支持从用户自定义的 ISO 启动,给我们提供了很多便利,它最多可以给用户存放两个自定义 ISO,刚好能满足我的需求。

第一个要准备的镜像是 Finnix,这是一个 Linux 环境的装机必备工具集。在 Vlutr 的 ISO 管理页面上,直接添加 http://www.finnix.org/releases/111/finnix-111.iso 即可,Vlutr 会在后台下载这个镜像。

第二个是 Windows 镜像,我安装的是 Windows Server 2012 R2,镜像名en_windows_server_2012_r2_vl_with_update_x64_dvd_4065221.iso,我发现在 Google Drive 上已经有人上传了一份镜像,地址 在这里。此外还需要一份 VirtIO 驱动,地址 在这里,我们需要把驱动解包后放进系统 ISO 内。我的解决方案是直接开一台 Windows 实例,关闭 IE ESC 后直接用浏览器下载系统镜像和驱动,然后集成好驱动后打包好新的 ISO,开启 IIS 把镜像提供给 Vultr。此方法最为迅速简便,从 Google Drive 下载系统镜像的速度可达 60 MB/S,花不了多少时间,而实例每小时收费仅仅是三美分而已,折合只需几毛钱就能解决问题,何乐而不为。

windows-on-linode-2.png

最终需要在 Vultr 上准备好两个自定义镜像。

安装系统

我采用的是在 Vultr 上安装,然后全盘烧录到 Linode 的方法。新建一个 Vultr 实例,选择 10 刀一个月的 SSD 实例即可,选择从自定义 Windows 镜像引导,然后开机,打开 VNC 在上面操作。

文件载入后就进入了 Windows 安装界面了。我选择了带 GUI 的 Server 2012 R2 标准版,接受了许可证之后进入分区界面,因为没有驱动,所以没有认出硬盘。点击加载驱动,分别加载BalloonNetKVMviorngvioscsivioserialviostor 内的驱动,注意不要隐藏不兼容驱动,上面列出的都要加载,否则虽然在 Vultr 上能正常运行,但到了 Linode 上就会报错。

之后如无意外能认出硬盘了,我为了方便,并不希望把引导和系统分开两个分区。因此需要手动分区,Shift + F10 打开黑框框:

1
2
3
4
diskpart
select disk 0
create partition primary
exit

刷新一下,选择已经创建好的分区,点击下一步。此时安装程序开始解包内部的 WIM 镜像,完成后会重启一次从硬盘引导继续安装,这时所有的操作都和 ISO 无关了。我们要做的是,在 WIM 镜像解包完成后重启的时候,在从硬盘引导之前把它拦截下来,对此时的硬盘做镜像。

具体的操作就是,完成解包重启时,VNC 会断开而且不会自动重连,需要马上刷新网页让 VNC 连线,这样用户可以看见虚拟机 POST 的界面,此时会有提示说按 Ctrl + B 进入 iPXE,我们照做,进入后启动过程就被拦截下来了。

接下来在 Vultr 的控制面板上把系统 ISO 卸载下来,这个操作会触发实例重启,如同上一步一样,把启动拦截下来。再在控制面板上把 Finnix ISO 挂载上去,这个操作同样也会触发实例重启,这次选择引导进入 Finnix。

打包系统

上面的实例装了 Windows 已经没有空间了,于是我另开了一个 Vultr 实例来做打包。选择月费 5 刀的储存型即可,系统我选择了 Debian 8,也就用一个小时不到,折算过来一毛钱都不用。

修改 root 密码后,在 Finnix 这边把整个硬盘镜像过去,速度有 25 MB/S 左右。复制 20 GB 的硬盘也就几分钟的事情,我就懒得考虑硬盘末端都是空白内容而无需传输这样的问题了。假设 Linux 实例的 IP 是 1.2.3.4。

1
dd if=/dev/vda | pv | ssh [email protected] "dd of=/root/windows.raw"

而 Linode 上的硬盘是 24 GB 的,为了方便日后部署,我在这个 Linux 实例上先对刚刚获得的 RAW 镜像扩容,这样省得部署好后再扩容。

1
2
fdisk /root/windows.raw
p

确认大小是 20 GB,无误则退出,追加 4 GB 空白到文件末端。

1
dd if=/dev/zero bs=1k count=4194304 >> /root/windows.raw

再用 fdisk 重新划分分区。打开 RAW 镜像,删除分区,再新建分区,基本上保持默认参数即可,分区会占满所有空间。按 t 把新分区类型设置为原本的 7 即 NTFS,按 a 标记 Boot,最后按 w写入更改。

准备 Linode

创建一个 Linode 1024 实例。

新建一个磁盘。

  • 名称 System
  • 容量 24576 MB
  • Type 选择 RAW

新建一个自定义的 Profile。

  • VM Mode 选择 Paravirtualization
  • Kernel 选择 Direct Disk
  • /dev/sda 挂载刚刚创建的 System
  • initrd 选择 No initrd
  • root / boot device 选择 /dev/sda
  • 下方的 Filesystem/Boot Helpers 一律选择 No

同样是因为网速快,我就不考虑复制整个硬盘是不是高效了,反正都是几分钟就能完成的事情。点击上方的 Rescue,把 /dev/sda 挂载为之前创建的 System,然后重启进入恢复模式,这里 Linode 用的也是 Finnix。在 Remote Access 页面打开一个 Lish Console。

1
2
passwd root
service ssh start

修改 root 密码并打开 ssh 服务,至此这个 Linode 已经准备好接受烧录了。

windows-on-linode-3.png

烧录系统

回到那个 Vultr 的 Linux 实例上,用 dd 把 RAW 镜像烧录到 Linode 上。假设 Linode 的 IP 是 4.3.2.1。

1
dd if=/root/windows.raw | pv | ssh [email protected] "dd of=/dev/sda"

 

wget O http://xxx.com/windows2003.32bit.raw | dd of=/dev/sda

因为烧录的是 24 GB 的镜像,完成后 Linode 那边无需额外的扩容操作,直接用刚刚创建的配置重启即可。打开一个 Glish Web Console 就能看见安装程序在 Linode 上继续了,短暂的等待后会再重启一次,之后便可设置管理员密码登录系统了。Glish 并不是那么好用,登录后可能需要配合键盘操作,把远程桌面打开便可。

windows-on-linode-4.png

cmd 上执行 netsh interface ipv6 set global randomizeidentifiers=disabled 即可正常使用 IPv6。

镜像打包

在 Vultr 实例上 tar 压缩即可,RAW 镜像末端都是空白,压缩后占用空间会大幅减少。之后随便装一个 Web 服务器,在本机把压缩好的镜像下载回来即可。

按照此流程部署最快只需要半小时,额外的花费极少,也免去了本机上传大容量镜像的麻烦。

原文地址:https://www.dommyet.me/windows-on-linode#comment-716

TP-Link TL-WR941N Ver 5.1安装OPENWRT过程

昨天为了试验下adsl多拨刷OPENWRT成砖了,硬件是WR941N Ver 5.1,用的是在原厂固件下的web界面直刷openwrt-ar71xx-tl-wr941nd-v4-squashfs-factory.bin的方法,很可惜刷完后除了lan口一个都不亮,复位也无效,折腾了一晚上才救砖成功,今天打算用一下方法再刷一次。

1.打开ddwrt的网站,下载WR941N对应的DD-WRT固件,

然后用TP-LINK自带的固件升级页面升级成ddwrt,,这样DDWRT就刷好了。

2.通过DDWRT为WR941N Ver5.1刷入OPENWRT

DDWRT刷好后,在IE浏览器输入http://192.168.1.1,在DDWRT“服务”页面中开启SSH服务;然后将下载的OPENWRT固件文件(openwrt-ar71xx-generic-tl-wr941nd-v4-squashfs-factory.bin)通过WinSCP上传到/tmp目录,

3.telnet 到路由器,输入以下命令

cd /tmp/

mtd -r write openwrt-ar71xx-generic-tl-wr941nd-v4-squashfs-factory.bin linux

过几分钟后路由器会自动重启,,这里需要说明的是,WR941N的openwrt固件默认没有打开无线功能,需要插上网线到LAN口,然后在IE界面输入http://192.168.1.1,然后将无线功能启用,

这样就可以正常使用无线功能了。

tplink 941n v5.1 ttl线救砖 刷原版固件教程

TTL接线方法参考大大的.
http://www.openwrt.org.cn/bbs/fo … thread&tid=6538

注意这里是应该插3根线(RX TX GND),v5.1并不带底针需要自己焊上去,材料可以在废旧的主板上找。

具体操作方法参考大大的,里面的命令部分按我下面给的
http://www.openwrt.org.cn/bbs/fo … thread&tid=3617

如果网上其他人提供的5.1命令有点问题刷不进去,下面这段可行
命令部分
setenv serverip 192.168.1.169;setenv ipaddr 192.168.1.1
tftp 0x80000000 abcd.bin
erase 0x9f020000 +0x3c0000
cp.b 0x80000000 0x9f020000 0x3c0000

固件到tplink官网下载好改名abcd.bin就好了

dd-wrt使用autoddvpn直连网站设置

 

為什麼要自定義直連

autoddvpn繼承chnroutes的設計,實現國內國外路由的分離,凡是連往國內一律使用wan gateway,而連往所有國外IP則一律使用VPN gateway,這樣的設計可以免除很多麻煩,也不需要維護復雜的翻牆名單,然而有些國外網站是你經常連上,而你很肯定這網站不需要翻牆,並且直連效果會更好的。像這種情況就需要自定義直連。

因為每一個網站在每個環境可能連線速度感受不同,同樣是Flickr也許網通用戶直連反而慢,但電信用戶直連就會更好,所以autoddvpn設計了這樣的架構,讓大家可以自定義需要直連的網段,而不是強迫大家一起直連。

如何實現

  1. 使用exroute_list 來指定預先定義好的exroute profile
  2. 使用exroute_custom 來指定自定義網段或單個IP

使用exroute_list 來指定預先定義好的exroute profile

目前autoddvpn有提供的exroute profile有:

  1. flickr
  2. vimeo
  3. dropbox
  4. nexttv
  5. gmail
  6. gtalk

詳見這裡的列表

這些網站我們都找出了他們的IP網段,定義在autoddvpn的svn裡面, 這樣大家可以共享方便的設定,不需要每一個人都去查找到底什麼網站使用什麼網段。然而每個人的需求不同,有些人可能完全不看vimeo or flickr, 有些人也甚至完全不用dropbox的,因此這些預先定義的alias可以依據實際的需要來設定使用,一旦設定了之後,exroute profile背後定義的網段就會直連,速度往往比透過VPN還快,甚至可以節省VPN流量。

倘若需要這些網站直連,只需要

這樣即可。

倘若您有新的需求,例如需要定義所有apple.com使用的IP直連,這部分就必須自己想辦法來找出apple使用的網段了。這部分一般存在比較不可掌控的因素,因為很多網站往往使用了CDN架構,IP會依據DNS查照的來源不同解析不同的IP網段,因此我們不把這樣網站的alias定義在SVN當中,我們建議使用接下來介紹的exroute_custom方式來設置。

使用exroute_custom 來指定自定義網段或單個IP

此外也可以自己定義IP網段,定義exroute_custom, 這裡通常是autoddvpn沒有預先定義的網段,依據個人需要可以自己來指定。autoddvpn會在ddwrt開機之後透過nvram get來獲得exroute_custom定義的網段,並且動態地把這些網段設定成直連。

設定方式如下:

注意:exroute_custom這裡設置的內容可以是一個網段或是單個IP, 注意使用單個IP的時候不需要加上netmask, 例如只需要174.36.30.70即可,不需要174.36.30.70/32, 而整個class C則是 174.36.30.0/24

詳見這裡的說明:

已經定義exroute_custom之後如果還要新增IP

如果之前已經定義過 exroute_custom了,發現還需要新增的話,例如需要加60.60.60.60這單個IP

這樣即可,不放心的話可以檢查一下:

這樣會列出所有自定義直連的網段

JFFS模式如何使用自定義直連

必須把exroute profile從svn wget抓下 /jffs/exroute.d/目錄底下

這樣JFFS模式每次開機的時候,vpnup.sh就會根據exroute_list裡面定義的內容來查找 /jffs/exroute.d/裡面相應的exroute profile,啟動之後log范例如下:

JFFS模式如何更新定義好的exroute profile

例如nexttv這個profile已經有設定了,但是profile在SVN上面做了修改,需要更新:

然後再重開機ddwrt即可,這樣新的nexttv定義就會生效

JFFS模式目前不管pptp or openvpn都支持自定義直連

wget模式如何使用自定義直連

wget模式因為不提供/jffs/寫入功能,因此所有內容都是開機之後動態抓取處理的。目前wget模式同樣也支持exroute功能,同樣也只需要

這樣重開機之後,可以觀察/tmp/autoddvpn.log就會看到exroute功能生效,所有名單動態從svn抓取存入/tmp/exroute.d/下,並且進行路由直連。

log如下