Author Archives: Wayne

远程连接

某不久前搞了个电脑桌,并把家里的电脑硬件升级了一番,看起来竟然还能让那台铁王八像模像样运行了起来。于是终于晚上不用像以前没事就待公司去,在家也能工作学习看电影。但毕竟工作才是正道,那么当然要把公司的电脑跟自己的笔记本联通咯。考虑了一下网络环境,便找到了这样一些手段:

  • ssh反向代理

这种方法就是通过ssh把端口号进行映射。由于家里是长城宽带,笔记本得到的ip是NAT路由给的,并不能得到公网ip啥的,同时公司的电脑又在防火墙后面,因此ssh反向代理是一个很好的解决方案。不过使用前需要拥有一台能合法访问的具有公网ip的服务器,对于这个可以买一个VPS解决:

  1. 在公司电脑上
$ ssh -NfR 2222:localhost:22 username@vps

上面的命令作用是,连接VPS并将公司电脑上的22端口远程转发到VPS的2222端口上。-R参数是远程转发,整个过程是这样:VPS收到发往2222端口上的数据会被ssh server将其加密转发到笔记本的ssh client上,然后笔记本上ssh client将收到的数据解密并转发到监听的22端口上,-f参数是让ssh连接后台运行,-N参数是使ssh连接不执行指令,也就是说仅仅是为了转发端口。上述指令执行结束后可登录VPS执行netstat -tnl | grep 127.0.0.1,若回显里包含2222端口则验证指令执行成功。

2. 在VPS上

$ ssh -g -N -f -L 2333:localhost:2222 localhost

上述指令作用是,将端口2222本地转发到2333上,并允许远程主机访问本地转发的端口。-g参数是允许远程连接本地转发的端口,-L参数是本地转发,在VPS上,本机发往2333的端口被ssh client接受并加密转发到本地(语义未描述清晰?),然后本地ssh server收到并解密数据并转发至本地的2222端口。上述指令执行结束后可执行netstat -tnl | grep 127.0.0.1,若回显里包含2333端口则验证了指令执行成功。

3. Done!现在,在笔记本上执行

$ ssh 公司电脑username@vps -p2333

此时已经ssh登录了公司电脑,有了ssh再配合root便能天下我有:)。这个时候本来应该结束了,但是解决方案还不完善,若ssh连接碰到网络问题不能自动重连,若是执行reboot指令也会丢失ssh连接无法恢复(都是实际使用的泪啊)。还好有autossh可解决问题。

$ sudo apt-get install autossh

譬如将第1步换成autossh就是autossh -M 0 -NfR 2222:localhost:22 username@vps,对了,在这之前还要把root账户ssh的id_rsa.pub交给vps以便省密码登录,执行ssh-copy-id user@vps。最好试试是否可以拥root账户ssh连接到vps,如果不行便只有手动上传,

# ssh-keygen -t rsa -C "email"
# scp /root/.ssh/id_rsa.pub user@vps:/home/user
# ssh user@vps
# cat id_rsa.pub >> .ssh/authorized_keys

然后需要将autossh的那条命令写到/etc/rc.local文件中,具体是在exit(0)之前。这里的脚本因为是root执行的,所以之前需要用root账户的id_rsa.pub(试错了很久才找到原因)

  • OpenVPN

用了一段时间的ssh反向代理后发现又很多不足,比如,虽然有了root可以做任何事,但用笔记本访问公司电脑上临时调试搭建的服务器还是很麻烦的;有时候也需要用公司的电脑访问放在家里的笔记本,这时又要去反向代理建立一遍;我又多出一台电脑又要费事的走一遍,等等。最后还是觉得,把自己用的电脑都放在一个虚拟的子网里还是更方便,于是便开始折腾了OpenVPN..
搜了搜教程,还比较顺利,虽然过程看着多。对于服务器,当然需要一个公网id,至于用 DDNS 解析神马的在碰到长城宽带就只能呵呵了。用的是阿里云的服务器。先配服务器:

  1. 安装openvpn服务端,根据不同的linux发行版而异,具体可查文档。
  2. openvpn服务端配置
    下载easy-rsa,git clone https://github.com/OpenVPN/easy-rsa,然后进入项目目录
$ cd easyrsa3
$ mv vars.example vars
$ vim vars

然后修改如下需要修改的地方(改为自己的信息)

set_var EASYRSA_REQ_COUNTRY     "CN" 
set_var EASYRSA_REQ_PROVINCE    "Shanghai" 
set_var EASYRSA_REQ_CITY        "Shanghai" 
set_var EASYRSA_REQ_ORG         "Blahblah" 
set_var EASYRSA_REQ_EMAIL       "xxxxx@xxxx" 
set_var EASYRSA_REQ_OU          "blahblah"

3. 初始化配置

./easyrsa init-pki

如果成功的话,会在当前目录下创建pki目录,用于保存证书文件。
接下来是设置各种密码时间,注意记录

4. 创建根证书

./easyrsa build-ca

创建过程中需要输入根证书的密码以及 Common Name。如果创建成功,则会在 pki/private/ 目录下创建 ca.key 私钥文件以及 pki/ 目录下创建 ca.crt 证书文件。


5. 创建服务器证书

./easyrsa build-server-full server

创建过程和根证书创建类似,需要输入证书的密码以及上一个步骤创建根证书的密码。
如果创建成功,则会在 pki/private 目录创建 server.key 私钥文件。在 pki/issued 目录创建 server.crt 证书文件。

6. 创建dh证书

./easyrsa gen-dh

7. 创建客户端证书

./easyrsa build-client-full yourclientname

前面两次是输入你的用户密码,第三次是输入ca证书的密码

8. 配置服务端
把上述步骤创建的 ca.crt, server.crt, server.key, dh.pem 拷贝到 openvpn 的 keys 目录,没有就创建一个,然后编辑或创建 server.conf 文件,主要的参数修改照着文档来就行了,主要关注的是那4个文件的路径,还有就是server 10.8.0.0 255.255.255.一行决定虚拟子网的范围,client-to-client取消注释以便让虚拟子网内的客户端互通,push "redirect-gateway def1 bypass-dhcp"注释此行可以仅让对虚拟子网的访问经过服务器而不使外网访问也通过,一般翻墙的时候搭的VPN可能会用的到。

9. 接下来是修改系统配置
打开服务器路由功能这一步也不知道需要不需要,按着教程来的直接开了没有考证

vim /etc/sysctl.conf

修改以下内容:net.ipv4.ip_forward = 1
然后使内核参数生效:sysctl -p
不过估计这个转发是跟翻墙需求有关吧

10. 启动OpenVPN

openvpn --daemon --config server.conf

server.conf的位置根据自己的写就省了,root权限启动

这样服务器端就完成配置了,接下来是客户端,那就很方便了,需要一个配置文件和easyrsa生成的ca.crt,yourclient.key以及yourclient.crt文件,如果要开机就启动的话配置文件后缀应为.conf,

client
dev tun
proto udp
remote 服务器IP 端口号
remote-cert-tls server
resolv-retry infinite
nobind
persist-key
persist-tun
# 这4个文件的绝对路径要正确,yourclient.pass里存放密码,可自行搜索加密方法
askpass yourclient.pass
ca ca.crt
cert yourclient.crt 
key yourclient.key 
comp-lzo 
verb 3

然后可以启动openvpn了,sudo service openvpn start(我测试的Linux Mint),traceroute一下其他客户端可以看出来虚拟子网工作了。

命令备查之tar/zip

一直没有记清楚 linux 下解压各种文件的命令,做个备查:

tar -xvzf tarfile.tar.gz

这个指令会将一个 tar.gz 归档文件解压到当前目录下,常用到的参数意义:
-x或者-t:-x解压文件-t列出文件
-v:显示详细输出
-z或者-j:-z指定一个gzip文件-j指定一个bzip文件
-f:读取指定的归档文件
-C:指定解压目录,目录必须存在

tar -czf tarfile.tar.gz *

这个指令会将当前目录下的所有文件打包成 tarfile.tar , 并且用 gzip 压缩,生成 gzip 压缩包 tarfile.tar.gz。参数同上所示。

Linux 下另一个压缩解压的命令 zip:

unzip -o -d /home/yw/ zipfile.zip

这个指令会把 zipfile.zip 解压到/home/yw/目录下,常用到的参数意义:
-o: 不提示直接覆盖文件
-d: 指定解压缩到目录

zip -r zipfile.zip /home/yw/ someOthers

压缩,-r参数用于递归目录中的文件.

Update:
tar 现在可自动识别解压文件格式,因此可直接执行解压而不用指定解压格式:

tar -xvf tarfile.tar.xz

rar格式的解压,用 unrar-nonfree

unrar-nonfree x rarfile.rar

记录一次ubuntu升级后黑屏的解决方法

睡觉之前手一抽把 xubuntu 升级了,看到里面有关于 video card 的更新不觉心头一紧,更完之后想确认一下就重启了下,结果就按剧本来了,开机黑屏了。赶紧重启多两次,问题照旧,瞬间睡意全无。用手机经过一番搜索,最终还是解决了问题。
开机后在 grub 处选择进入 recovery 模式,然后开启网络并用 root 登录,就能查看 /var/log/Xorg.0.log,搜索 EE(代表错误信息)就能找出进不去桌面的原因,一般是第一个 EE 就能知道,后来发现是 fglrx 的配置文件不正确,导致各种模块都找不到引发一大串的 EE,但我并不想去设置配置文件,就想把 fglrx 这个东西重装一遍。然后我找到一个移除这个显卡私有驱动并换回开源驱动的方法:

sudo apt-get purge 'fglrx*'
sudo update-alternatives --remove-all x86_64-linux-gnu_gl_conf
sudo apt-get install --reinstall libgl1-mesa-dri libgl1-mesa-glx

执行完指令之后重启便能恢复为开源驱动便能进入桌面系统,然后再到 additional drivers 安装私有显卡驱动。搞定。