用 iptables 实现端口映射

由于我这里是几台 Windows 连接网关通过ADSL共享上网的,网关为 Archlinux ,单网卡,有两个网络接口,eth0链接内网,地址192.168.1.2;ppp0为ADSL拨号连接,地址自动分配,内网网段为 192.168.1.0/24 。
下图为物理拓扑图

物理拓扑图

比如内网上的pc1这台机想要BT下载,由于p2p的工作原理,我们必须在网关上打开到pc1的端口映射,这里假设pc1的ip地址为192.168.1.11,bt下载端口为11197。

# iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 11197 -j DNAT --to-destination 192.168.1.11:11197
# iptables-save -c > /etc/iptables/iptables.rules(这条命令不能用sudo,可以先执行su命令。不执行这条命令的后果是重启机器后要重新执行上一条命令)

就是这么简单,你现在已经打开了pc1的端口映射,而电驴的 HighID 问题也可以参考这个方法。附上一张内网BT下载的截图。(为啥我的下载速度这么慢?大家都限速了??)

utorrent-2008-07-25.JPG

HowTo:搭建家用下载&路由服务器

其实这篇文章不能说是 HowTo ,最多只能说是我自己的安装笔记而已。该服务器主要用来下载和实现共享上网,有空还可以用它来研究iptables。整个系统没有鼠标键盘显示器,全都日常维护都是用SSH进行,所以使用了密钥的验证方式确保安全。下载方面用mldonkey实现,通过局域网内其他电脑用网页方式管理,唯一的不足是对BT下载支持不够。由于服务器基本上都是24小时运作的,所有在上面弄了个dnsmasq,实现DNS缓存和DHCP,局域网的其他机器ip都是自动获取,接上网线就能上网,十分方便。

先说说用到的软件

  • ArchLinux
  • ssh
  • iptables
  • dnsmasq
  • mldonkey

ArchLinux
选择安装包时只选择 base 组,加上 support 组中 re-pppoe,sudo,iptables等几个包,安装一个最小系统。安装完后运行

# pacman-optimize
# sync
# pacman -Syu mldonkey dnsmasq

ssh
为了安全,我这里设置了只允许用密钥验证,以下是我的 /etc/ssh/sshd_config 文件的内容

Port 22
ListenAddress 0.0.0.0
Protocol 2

KeyRegenerationInterval 1h
ServerKeyBits 768

LoginGraceTime 2m
PermitRootLogin yes

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no

ChallengeResponseAuthentication no
UsePAM yes
Subsystem sftp /usr/lib/ssh/sftp-server

iptables
由于服务器上只有一张网卡连接到交换机,再通过交换机连接到 ADSL Modem 上,所以需要共享服务器上的ppp0链接让局域网上的其他机器上网。

# iptables -F INPUT
# iptables -F FORWARD
# iptables -F POSTROUTING -t nat
# iptables -t nat -F
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
# iptables-save -c > /etc/iptables/iptables.rules

dnsmasq
这个主要是用来做 dns 缓存和 dhcp 服务,参考了 firefoxmmx 写的这篇教程《提高ADSL(pppoe)上网速度

# vi /etc/dnsmasq.conf

找到下面这一项

#resolv-file=

用下面的一条语句替换

resolv-file=/etc/resolv_dnsmasq.conf

将下面两句前的注释符号删除

interface=eth0
dhcp-range=192.168.1.10,192.168.1.20,255.255.255.0,24h

创建新的dns配置文件,把自己常用的DNS添加到/etc/resolv_dnsmasq.conf中

# cp /etc/resolv.conf /etc/resolv_dnsmasq.conf

编辑 /etc/ppp/pppoe.conf

# vi /etc/ppp/pppoe.conf

找到下列一行

PEERDNS=NO

并在该行下面添加

DNS1 = 127.0.0.1

mldonkey
这里要注意 mldonkey 默认只允许 127.0.0.1 访问,要首先设置允许其他网段访问。~/.mldonkey/downloads.ini 文件的第37行就是设置的地方。再配合《导入 amule/emule 的设置到 Mldonkey》和《让 MLDonkey 导入 amule/emule 的临时文件》两篇文章,驴子基本上能全速运行了,如果你遇到中文文件名变成下划线的问题,可以参考这篇文章《 解决 Mldonkey 中文文件变下划线问题 》。

最后启动服务
# /etc/rc.d/iptables start
# /etc/rc.d/sshd start
# /etc/rc.d/samba start
# /etc/rc.d/dnsmasq start
# /etc/rc.d/mldonkey start

或者编辑 /etc/rc.conf 文件,添加到 daemon 段中。

ok,收工,enjoy it。

解决 Mldonkey 中文文件变下划线问题

用了 Mldonkey 一段时间了,对他的速度很满意,决定以后也将继续使用下去,但是对他的中文文件名变成下划线这个问题一直很苦恼。今天 Google 了一下,根据这篇文章,找到了个比较满意的解决方法,这里记录下面。我使用的系统是 ArchLinux ,Mldonkey 版本是 2.9.5 。

网上盛传的那个 Unicode 的补丁其实在 2.9 的版本上已经自带有了,不用打补丁编译的,但是即使用上现在最新的 2.9.5 版也一样会有下划线问题,真正解决问题的关键是设置运行 mlnet 的用户的 LANG 和 LC_ALL 环境变量为 zh_CN.UTF8。

首先新建 /usr/bin/mlnet.sh 文件,写入以下内容

#!/bin/bash
export LANG=zh_CN.UTF8
export LC_ALL=zh_CN.UTF8
/usr/bin/mlnet & > /tmp/mldonkey.log &

然后编辑 /etc/rc.d/mldonkey 文件,查找到下面的内容

su $MLDUSER -c "/usr/bin/mlnet &> /tmp/mldonkey.log &"

更改为以下内容

su $MLDUSER -c "/usr/bin/mlnet.sh &"

保存,现在重启 mldonkey
sudo /etc/rc.d/mldonkey restart

过段时间查看那些下载完成的文件,你会发现文件名不会再有下划线了,问题解决。

(6月20日补充)
这个是经过一个晚上下载后的截图,图中的第一部分是应用该方法前下载到的文件,中文部分都变成了下划线,而第二部分是昨天晚上下载的,已经解决了中文文件名的问题。

mldonkey-chinese-problem-2008-06-20.JPG

Arch 上实现自动挂载 USB 设备和本地硬盘(KDE 篇)

自动挂载 USB 设备并挂载本地硬盘
首先安装 hal

#pacman -S hal

确保自己的登录用户已经在 optical,storage这两个组中,没有的用以下命令添加

#gpasswd -a 用户名 组名

然后下载下面的hal规则,复制到 /etc/hal/fdi/policy/ 下
点击下载 HAL 规则(鼠标右键-另存为)

然后启动hal服务

#/etc/rc.d/hal start

现在你可以插入一个u盘试试,一般已经正确挂载了,而且还会自动挂载硬盘上的 vfat,不过访问ntfs分区时还是不能成功,一般会提示下面的错误

TODO: have to rethink extra options

据说这是hal本身的bug所致,详情可以浏览 External USB HD does not work with HAL。我们可以使用比较原始的方法解决,直接编写fstab文件实现挂载。

首先确保安装了 ntfs-3g 这个包,这里比如你想把 sda1 挂载到 /media/winxp 下,其他如此类推

建立挂载用的目录,此步为必须的,否则会提示没有权限执行

mkdir /media/winxp

然后打开 /etc/fstab 文件

vi /etc/fstab

在最下面加上

/dev/sda1 /media/winxp ntfs-3g auto,locale=zh_CN.UTF-8 0 0

保存文件,重启系统,现在可以正常访问ntfs分区了。

用 Tvtime 在 Linux 上看电视

由于最近有幸从朋友处拿了块 Gforce 8600GT 来爽一下,然后马上将 ATI 的 8.03 驱动删了,装上 nvidia 的 169.12-1 驱动,发现原来世界是如此美妙的,可恨的 ATI 驱动啊,跑题了。
其实 Linux 上的电视软件不多,记忆中也就 Mythtv,kdetv,Tvtime 这三个。Mythtv 就不说了,要安装一堆东西,不过如果你要设置一台 MCE,可以考虑。kdetv 没尝试过,不过传说设置比 tvtime 要简单些?等下次再试试,这次先说说如何用 Tvtime 看电视。

一些截图

screenshot-tvtime-01-2008-03-30.png

screenshot-tvtime-02-2008-03-30.png

screenshot-tvtime-03-2008-03-30.png

我的硬件环境:

  • Arch + GNOME 2.20 + ndivia 169.12-1 + tvtime 1.0.1-2
  • 丽台的 Winfast TV 2000 XP 电视卡,买了有五六年了。

首先你要有一张电视卡,并且能正确的识别到,可以用下面的命令查看是否已经正确识别到

lspci

上面的命令会返回一大堆的信息,查看有没有你的电视卡,下面是我的返回结果

01:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
Subsystem: LeadTek Research Inc. WinFast TV 2000
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 16 (4000ns min, 10000ns max)
Interrupt: pin A routed to IRQ 10
Region 0: Memory at fddff000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data <?>
Capabilities: [4c] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-

蓝字部分表示已经正确识别到我的电视卡了。然后执行下列命令

xvinfo |grep YUY2

如果有以下的返回结果,表示你已经具备了所需的硬件要求,接下来可以安装 Tvtime 了。(ATI / AMD 显卡用户请看文章最后的“问题集”)

[suxixb@Su ~]$ xvinfo |grep YUY2
id: 0x32595559 (YUY2)

安装 Tvtime

pacman -S tvtime

运行 Tvtime 后,会出现 Tvtime 的设置界面,如下所示,如果没有出现设置菜单,按键盘的 TAB 键。

screenshot-04-tvtime-2008-03-30.png

设置电视制式为 PAL
Input configuration → Television standard → PAL,然后退出 Tvtime(按 ESC 退出)

再次运行 Tvtime,选择 Input configuration → change video source → Television(可用右方向键选择),然后把 Change default audio standard()这项括号里的内容改为 PAL-DK,回到主菜单,选择 Channel management → Change frequency table → china broadcast ,在回到上一级菜单,选择 Scan channels for signal 来搜索电视台。

现在可以用上下方向键来选台,左右方向箭来调节声音,怎么样,不错吧。

问题集
Q:使用 ATI 闭源驱动后,不能启动 Tvtime ,提示缺少 YUY2 输出。
A:好像是 ATI 驱动的问题,暂时没有解决方法,但传闻说安装个 xgl-server 就可以了,不知道是否正确,或者可以试试 ATI 的开源驱动。

Q:运行 Tvtime 后,只有图像,没有声音。
A:大多数情况下 ALSA 的线路输入是静音的,只要把影音取消后,调节到合适的音量便可。

screenshot-hda-nvidia-alsa-mixer-2008-03-30.png

在 Arch 上安装并优化 GNOME(2008-08-3 更新)

其实 Arch 官方建议安装的桌面环境有 GNOME 和 Xfce,而且这也符合 Arch 的 kiss 原则。要搭建 GNOME 环境,过程稍微比 Kdemod 简单,下面我介绍如何在 Arch 上安装并优化 GNOME,这里假设你已经安装好了 Arch 的基本系统和配置好了 Xorg ,显卡驱动等,并能连接上网,和使用 root 账户登录。关于如何安装 Arch 可以参考我的这篇文章《通过 FTP 方式安装 Arch (硬盘安装)》。

screenshot-desktop-01-2008-3-30.png

安装 GNOME

pacman -S gdm gnome gnome-terminal gedit nautilus-open-terminal file-roller gksu gconf-editor

安装一些免费的字体

pacman -S ttf-dejavu ttf-ms-fonts ttf-arphic-uming ttf-arphic-ukai

让 Arch 启动后直接进入 GNOME

vi /etc/inittab

注释掉下列这一行(前面加#号)

x:5:respawn:/usr/bin/xdm -nodaemon

然后把下列这行前的“#”号去掉(也就是使用刚才装的 gdm 登录管理器)

x:5:respawn:/usr/sbin/gdm -nodaemon

保存文件,然后编辑

vi /etc/rc.conf

找到下面这行(可能不完全相同)

DAEMONS=(syslog-ng network netfs crond)

替换为(也就是在后面添加一个 gdm)

DAEMONS=(syslog-ng network netfs crond gdm)

如果你是使用 LCD 的,可以执行

pacman -S cairo-lcd libxft-lcd

其中会要求删除 cairo 和 libxft 这两个包的,回答 yes 即可。好了,是时候登录到 GNOME 了,先新建一个普通用户(suxixb 是我的用户名,你需要改为你自己的,下同)

useradd -m -s /bin/bash suxixb
adduser suxixb(推荐用此命令)

设置一个登录密码

passwd suxixb

然后我们可以启动到 GNOME 下了,输入

/sbin/telinit 5

这样会启动 gdm ,用刚才新建的用户名和密码登录。接着让我们继续优化一下 GNOME。

中文化
这里有几种方法,一种是修改 /etc/rc.conf 为中文 locale,不过会使字符界面下也使用中文 locale,但又缺少相关的中文字体,所以会让字符界面显示一个个的小方块。所以我使用第二种方法:保持 /etc/rc.conf 为英文 locale,编辑主目录下(/home/suxixb)的 .profile 文件,如果不存在就新建一个,添加 export LANG="zh_CN.UTF-8" 这段内容。

注销一次,好了,界面已经是中文了,接着安装一个中文输入法,你可以选择装 scim-python 或者 fcitx,前者的安装方法可以参考我的这篇文章《Arch 上安装 kdemod 3.5.9 桌面环境并启动 compiz 0.7.2》,这里我选择安装后者。

pacman -S fcitx

然后编辑主目录下的 .profile 这个文件,输入下列内容

export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim
fcitx &

以下是我的 .profile 文件中的内容

export LANG="zh_CN.UTF-8"
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim
fcitx &

注销一次,现在 fcitx 已经自动启动了,接着我们可以优化一下 fcitx,例如自动隐藏工具条等,其配置文件是 /home/suxixb/.fcitx/config,也可以参考我的这篇文章《隐藏 fcitx 输入法的状态栏

安装一些必备的软件

pacman -S pidgin firefox deluge mldonkey sancho-gtk gthumb quodlibet mplayer mplayer-plugin codecs gstreamer0.10-plugins

  • pidgin 主要是用来上 MSN 和 Gtalk 的,当然,你也可以用来上 QQ
  • firefox 就不说,如果要使用最新的 3.0 需要到 AUR 上下载编译(现在已经是最新的3.0了)
  • deluge 是一个 BT 客户端,支持选择文件下载
  • mldonkey 和 sancho-gtk 是用来电驴下载的,配置稍微复杂,当然,你也可以替换为 amule
  • gthumb 是一个看图软件,和 Win 下的 ACDSee 接近
  • quodlibet 是一个音频播放软件,并且可以方便的管理硬盘上的音频文件,这个和 Amarok 是我最喜欢的播放软件了,但 Amarok 是 KDE 的
  • mplayer 也不多说了,即使你不用他看视频也应该装上
  • mplayer-plugin 是用来播放网页上的流媒体的
  • codecs 以及 gstreamer 包括了几乎用到的解码器,看电影必备

问题集
Q:GNOME 关机时,显示的是 “Unknow” 用户名。
A:这主要是新建用户时,没有写全名,只写了简称。解决办法是用 root 用户执行

chfn suxixb

然后在 “全名” 处填上你喜欢的名称,问题解决。

(本文未完)

  1. 订阅

    • 订阅 我的 Blog
    • Feedsky 订阅数
    订阅到iGoogle或Google Reader 订阅到鲜果 订阅到抓虾 订阅到飞鸽 订阅到Bloglines 订阅到我的雅虎 订阅到NetVibes 订阅到Newsgatar 订阅到Rojo 订阅到网易有道 通过哪吒订阅到MSN,Gtalk,Skype 订阅到QQ邮箱
     

  2. 重要公告

    目前该博客(www.shareitem.org,以下简称该博客)是建立在Yo2优博网上的,由于一些众所周知的原因,本人(suxixb)决定于2008年8月1日起陆续将该博客上的所有文章转移到新网站上,地址为http://shareitem.org,并改名为ShareItem.org(简称siog),原来的订阅地址(feed.shareitem.org)将保持不变,可继续使用。在转移成功后,该博客仍然保留到到期为止(2008年11月18日),在到期后,将不能再通过www.shareitem.org来访问该博客,本人也不在该博客上进行更新和发布文章,所有的新文章将统一在新网站上发表。谢谢各位的支持。

  3. 最新评论

  4. 最新日志

  5. 阅读共享

  6. 标签

  7. 存档

  8. Logo