继续我的Ubuntu之旅 (1)

自从2008年6月心血来潮用上了Ubuntu, 到现在两年时光飞逝. 开始的时候为个输入法焦头烂额了好久(8.04 LTS), 后来又驱动不起我的稀有华硕声卡, 后来不知什么时候”想通了”回去尝鲜Win7, 过了一年多又换回Ubuntu(原因是机子鬼使神差的装不上Win7了, Win也不会给出详细的Log来供你分析错误)…
8.04到10.04, LTS到LTS的跨越, 升级的也绝不仅仅是版本号. 7秒的开机速度(SSD)和插到别的机子上引导, 驱动全部装好, 都是Win很难达到的优势. 某次驱动起了一块难缠的3G网卡, 事后别人问起却忘记了具体方法, 方觉早应该把这样一些细节记录下来.

以下便是这次用Ubuntu数月以来又学到的一部分”新”东西, 已经单独开文说过的这里也不再赘述了.

先给个目录:
1, terminal显示GBK/GB2312等编码的文本
2, nvidia驱动和开源驱动/mesa之间的恩怨情愁
3, 多语言界面
4, 共享网络给别人用
5, 防御arp攻击

1, terminal显示GBK/GB2312等编码的文本

比如telnet登陆白云黄鹤论坛

$ telnet bbs.whnet.edu.cn

显示出满屏幕的菱形里面套问号, 让人不禁内牛满面. 解决方法:

$ luit -encoding gbk telnet bbs.whnet.edu.cn

这样就很和谐了~~
此外,xrgsu提示的乱码服务器错误信息,也可以用编码GB2312正常显示. 唯有一点不解,GB2312正常显示,而GBK却乱码…

2, nvidia驱动和开源驱动/mesa之间的恩怨情愁…

前面提到, 我把自己硬盘当移动硬盘启动各种杯杯具具的本本, 其中有台n卡机, 开源驱动卡得内牛满面, 于是去NVIDIA官网下了sh格式的驱动来安装. 安装倒是成功了, 但是再把电脑插在其他本本上时, low-graphics mode的讨厌对话框就那么不请自来了…
nvidia新版驱动的sh文件有提供nvidia-uninstaller命令,可惜用了之后重启,照样 low-graphics. 围观了一下/etc/X11, 发现装载nvidia模块的xorg.conf仍然在世, 于是:

# rm /etc/X11/xorg.conf

重启进入了正常graphics mode, 然而glx插件就那么杯具掉了(运行glxgears出现错误: Error: couldn’t get an RGB, Double-buffered visual, 以及不能加载glx插件之类的), 纠结许久, 在各位大牛(@BOYPT @liangsuilong 等)的提醒下, 找到了罪魁恶首: /usr/lib/xorg/modules/extensions/libglx.so 是到 /usr/lib/xorg/modules/extensions/libglx.so.195.36.24 的软链接, 而后者是n卡驱动的内容…
察看 /var/log/Xorg.0.log 可以找到装载”glx”插件失败的记录…
于是, reinstall/reconfigure数个包, 算是找到了需要处理的内容, 结合后来在国外论坛上查到的回答, 我最终做了这么个脚本:
/usr/local/bin/nvremove:

sudo nvidia-uninstaller
sudo apt-get remove --purge nvidia*
sudo apt-get remove --purge xserver-xorg-video-nv xserver-xorg-video-nouveau
sudo apt-get install xserver-xorg-video-all
sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core
sudo dpkg-reconfigure xserver-xorg
sudo rm /etc/X11/xorg.conf

需要卸载n卡官方驱动时, 运行此脚本, 方能使xorg自己的各功能和谐工作…

3, 多语言界面

早先用Ubuntu 8.04/8.10时, 如果系统语言是zh_CN.UTF-8(中文简体), 只需要运行下面的命令即可打开英文的gedit:

env LANG=en_US.UTF-8 gedit

然后在Ubuntu 10.04里, 这个命令失效了…
经过很长时间的纠结, 最后偶然发现原来是环境变量的处理发生了变化, 使用这个命令即可达到效果:

env LANGUAGE=en gedit

不过openoffice.org仍然用以前的环境变量决定界面语言, 修改环境变量LC_ALL也可以起到同样的作用.

4, 共享网络给别人用

Win下的”Internet 连接共享”总是病秧秧的, 某些时候莫名其妙就要双方设置IP地址, 和对方指定网关/DNS才能正常使用NAT上网.
不想Linux下的类似操作更加复杂(一开始这么觉得), 还要写好长的iptables. 后来写了个脚本, 一切都和谐了
首先要安装dnsmasq提供DHCP/DNS服务:

# apt-get install dnsmasq

然后修改它的配置文件: /etc/dnsmasq.conf
我的配置文件有效行(去除注释之后)如下:

no-resolv
no-poll
server=2001:470:20::2
server=8.8.8.8
dhcp-range=192.168.2.100,192.168.2.220,12h
dhcp-option=3,192.168.2.1
dhcp-option=6,192.168.2.1

其中 192.168.2.1 是我自己在NetworkManager里设置的一个ad-hoc网络的IPv4固定地址.
修改完成后重启dnsmasq服务:

# service dnsmasq restart

然后新建脚本 /usr/local/bin/proxy:

#!/bin/sh
INTIF="$2"
EXTIF="$1"
EXTIP="`/sbin/ifconfig $1 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
/sbin/depmod -a
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT 
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

使用示例:

# proxy eth0 wlan0

效果就是把eth0的网络连接分享到wlan0网络, 这样ad-hoc方式连接到此计算机的用户就直接可以正常访问网路啦!

5, 防御arp攻击

校园网里各种arp欺骗满天飞, 让整个网络呈现一种支离破碎感… 所幸找到了如下的方法来”以毒攻毒”:
在此之前先安装libnet:

# apt-get install libnet1

然后编译安装 arpoison(下载: http://www.arpoison.net/ 进入后下载 For libnet 1.1.x的版本)

$ tar -xvzf arpoison-*.tar.gz
$ cd arpoison
$ make
# mv arpoison /usr/local/bin

然后新建脚本: /etc/arpd

#!/bin/bash
#网关mac地址
GATEWAY_MAC=
#目的mac地址
DEST_MAC=ff:ff:ff:ff:ff:ff
#目的ip地址(网关ip地址)
DEST_IP=
#本地网卡接口(例: eth0)
INTERFACE=
#$INTERFACE的mac地址
MY_MAC=
#$INTERFACE的ip地址
MY_IP=

#在本机建立静态ip/mac入口 $DEST_IP--$GATEWAY_MAC 
arp -s $DEST_IP $GATEWAY_MAC 

#发送arp reply ,使$DEST_IP更新$MY_IP的mac地址为$MY_MAC
arpoison -i $INTERFACE -d $DEST_IP -s $MY_IP -t $DEST_MAC -r $MY_MAC 1>/dev/null &

各mac地址可以在网路正常的时候使用下面的命令找到:

$ arp -an
$ ifconfig

参考资料: http://hi.baidu.com/yk103/blog/item/f39e253f9d6aeeed55e72361.html
还有一些参考资料因为时间过久已经忘记,因此没有列出,在此表示非常抱歉.

15 thoughts on “继续我的Ubuntu之旅 (1)”

        1. 这不废话=.= 我的意思是这两个配合着用,明显我是为了临时把自己某种网分给另一个网,然后直接用.包括可以netboot引导别人

        2. 至于School和Home, 我不这么用我早疯了… 我现在一会3G分享给eth0, 一会eth0分享给wlan 一会3G分享给Wlan 您就慢慢建立profile吧….

  1. LC_CTYPE影响的不是语言而是编码,如果你设置成ISO8859,但是语言是zh_CN就杯具了;但是如果你的系统只有UTF8编码(默认如此),那是怎么改都没用,libc给出警告说fallback to xxx。

    1. 囧,PT牛的评论被自动当spam了…
      话说我也找到这里了,但是不太对,因为我LC_CTYPE修改也不影响界面语言..

Leave a Reply

Your email address will not be published. Required fields are marked *

QR Code Business Card