需求背景

  • 我的办公电脑是一台使用Ubuntu Linux系统的台式机。(Ubuntu 15.10)

  • 我带来了自己的Windows系统的笔记本电脑到公司里用,但是不想用Wifi上网(太慢)。

  • 我的办公卡座下就只有一个网线插口,已经被办公电脑用了。

  • 这台办公电脑只有一块网卡,用网线插在了卡座唯一的插口上,用来上网。

那么问题来了,怎么才能让这台笔记本电脑通过这台Linux主机上网呢?

解决思路

三步走:

  1. Linux主机上加装一个USB有线网卡,让Windows主机通过网线连接到Linux主机。

  2. Linux系统里对这个USB网卡包转发到原来上网的网卡上。

  3. Windows系统把网关设置为Linux主机,就可以上网啦。

实施步骤一:让Windows主机有线连接到Linux主机

淘宝上搜索“USB有线网卡”,更准确点的是搜“AX88772C 网卡”。这是个一头是usb,一头是RJ45网口的小东东。AX88772C是这种网卡使用的芯片的型号。通常二三十块钱,我买的绿联的。

准备一条交叉线(网线,水晶头部分使用交叉方法压制),淘宝上可以买到,长度根据你两台电脑之间的距离自己选择。我买了2米的。

把USB网卡插到Linux主机的USB接口上,安装驱动:

  • 首先要去找网卡驱动。有的买来的网卡就带了驱动光盘,也可以找找有没有Linux驱动。这种网卡的芯片都是AX88772C的,google一下就可以下载到Linux的驱动源码。

  • 源码解压后是类似这样的文件夹:AX88772C_772B_772A_760_772_178_LINUX_DRIVER_v4.17.0_Source

  • 根据文件夹里README文件来编译就可以了,基本上就是 make && make install

  • 如果编译碰到类型datetime的报警,就需要修改下makefile里的EXTRA_CFLAGS,给它加个no-error选项,如这样:EXTRA_CFLAGS = -DEXPORT_SYMTAB -Wno-error=date-time

  • 编译、安装完成后,还需要按照README里写的启动一下这个驱动模块:modprobe asix

  • 这时系统就会多一个网络接口出来,可能是eth1,也可以是一串不规则的字符串名字。(在最新的ubuntu 17.04中是带有mac地址的字符串)

  • 给这个新的网络接口设置下IP,比如:192.168.0.1 (子网掩码 255.255.255.0 网关留空),然后在其路由选项里,勾上仅将此链接用于相应的网络上的资源以及忽略自动获取的路由(如果这个选项可以勾就勾上)

实施步骤二:Linux系统设置端口转发,共享网络

切换到root账户,执行以下命令:

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

注意:上面这行里的eth0就是Linux机器上能上网的那个网络设备。

实施步骤三:Windows上设置网关为Linux系统

windows上用交叉线连上linux那个网卡后,系统会多出个连接,win7的话在弹出对话框里选择“办公网络”。

给它设置ip:192.168.0.20 (子网掩码 255.255.255.0 网关 192.168.0.1),注意网关就是Linux电脑的新网络借口的IP

把DNS设置为4.4.4.4,或者你公司内部的DNS服务器,不然域名是解析不了的。

这时在Windows上ping 192.168.0.1是可以通的。

然后在控制面板里,将这条新链接的防火墙关闭。

这时去Linux上ping 192.168.0.20也是通的了。

共享文件、共享鼠标键盘

这时Linux和Windows其实是在一个小的子网里了,所以不仅能共享网络上网,共享文件也是水到渠成的事,装个samba就可以了。

共享鼠标键盘就用synergy就可以了。

sambasynergy的使用方法这里不做介绍。