eMule电骡使用OpenVPN获取HighID配置教程

以下是在 Windows7 虚拟机环境中做的试验,还需要有一台自己的 Openvpn 服务器,用于映射端口,打通 eMule 的连接,最终获得 HighID,使之可以连接 lowID 用户,提高下载速度或者资源。
PS:早些年就用过这个方案,拖延症托到现在才把这方案记录到博客中来让更多的 eMule 分享者使用。

下面这张图是配置好之后正常下载文件中的截图
eMule_XdP downloading
1、设置 eMule TCP、UDP 端口,我设置的是 TCP 3531,UDP 3531,并配置 Windows 防火墙,配置出、入方向的 TCP、UDP 的 3531 端口为允许连接,不然是获得不到 HighID 的。

eMule_port_setting

Windows 7_eMule_in

Windows 7_eMule_out

2、配置 OpenVPN 客户端静态 ip 地址,每次连接都分配同一个地址。
2.1 在 OpenVPN server.conf 配置文件中增加

vim /etc/openvpn/server.conf

# Client config directory
client-config-dir /etc/openvpn/ccd

2.2 创建 /etc/openvpn/ccd 目录

mkdir -p /etc/openvpn/ccd

2.3 查看你的 OpenVPN 分配给你的证书名:

openssl x509 -in /etc/easy-rsa/easyrsa3/pki/issued/windows.crt -noout -subject | sed -e 's/.*CN=\(.*\)\/.*/\1/'

windows

我这次的名字为 windows,这个看你 OpenVPN 创建证书分配给客户的时候你自己定的

2.4 在 ccd 目录创建名为 windows 的文件,内容如下:

cat /etc/openvpn/ccd/windows
ifconfig-push 10.8.0.14 10.8.0.13

前面一个是客户端,你电脑连接成功 OpenVPN 之后获取的地址,后面是服务器使用的地址,这两个地址分配也是有规律的,为什么要这样配置呢?

客户端占用两个 IP,因为根据 IP 掩码位 /30 得知可用的 IP 就是两个。对于为什么只有 64 个,下面是官方的解释。
解释:
分配静态 IP 的方式是通过 ipconfig-push 设置的,而 ifconfig-push 地址代表虚拟客户端和服务器 IP 端点。它们必须从连续/30个子网中取得,以便与 Windows 客户端和 TAP-Windows 驱动程序兼容。具体来说,每个端点对的 IP 地址中的最后一个八位字节必须从该集合中取出:

[1,2] [5,6] [9,10] [13,14] [17,18]
[21,22] [25,26] [29,30] [33,34] [37,38]
[41,42] [45,46] [49,50] [53,54] [57,58]
[61,62] [65,66] [69,70] [73,74] [77,78]
[81,82] [85,86] [89,90] [93,94] [97,98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [ 133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

2.5 修改配置权限

chown -R nobody:nogroup /etc/openvpn/ccd

2.6 重启 OpenVPN 服务

service openvpn restart

3、在 OpenVPN 服务器中设置端口转发
上面我的 eMule 的 TCP 和 UDP 端口分别为TCP 3531,UDP 3531,OpenVPN 公网 ip 为 233.233.233.233,客户端连接 vpn 后得到的 ip 为 10.8.0.14, 分别执行

# opvnevpn to emule Get HighID
iptables -t nat -A PREROUTING -p tcp -d 233.233.233.233 --dport 3531 -j DNAT --to 10.8.0.14:3531
iptables -t nat -A PREROUTING -p udp -d 233.233.233.233 --dport 3531 -j DNAT --to 10.8.0.14:3531

iptables-save > /etc/sysconfig/iptables

查看是否配置成功,命令如下:

iptables -t nat -vnL

iptables_NAT_PREROUTING_Chain

4、重新连接 OpenVPN,重启 eMule,连接服务器看看是不是 HightID 吧,

ovpn

eMule_My_info_HighID

还有一个检测方法:

telnet 233.233.233.233 3531

如果是通的,那表示端口映射成功,可以获得 HighID 了。

mutt 找不到 libtasn1.so.3 动态链接库文件的解决方法

系统为 CentOS 6.6,使用 yum 安装的 mutt,无法运行,提示 libtasn1.so.3 => not found,使用 ldd 命令来查看可执行文件依赖的动态链接库有哪些。

ldd /usr/bin/mutt

libtasn1.so.3 => not found

解决步骤一:在系统中查找这个文件

find /* -type f -name "libtasn1*"

/usr/lib/libtasn1.so.6.4.0
/usr/lib/pkgconfig/libtasn1.pc
/usr/lib/libtasn1.so.6.4.2

但是发现这个库文件比较新,mutt 没办法使用,决定编译对应的 libtasn1 版本,libtasn1.so.3 对应的版本可能是 libtasn1-0.3.x 这个系列。

解决步骤二:手动编译 libtasn1

wget http://ftp.gnu.org/gnu/libtasn1/libtasn1-0.3.10.tar.gz
tar zxf libtasn1-0.3.10.tar.gz
cd libtasn1-0.3.10
# 指定安装目录
./configure --prefix=/usr/local/libtasn1-0.3.10
make && sudo make install

ls -lrt /usr/local/libtasn1-0.3.10/lib
total 456
-rwxr-xr-x 1 root root 172275 Apr 28 18:18 libtasn1.so.3.0.10
lrwxrwxrwx 1 root root 18 Apr 28 18:18 libtasn1.so.3 -> libtasn1.so.3.0.10
lrwxrwxrwx 1 root root 18 Apr 28 18:18 libtasn1.so -> libtasn1.so.3.0.10
-rwxr-xr-x 1 root root 833 Apr 28 18:18 libtasn1.la
-rw-r--r-- 1 root root 282478 Apr 28 18:18 libtasn1.a
drwxr-xr-x 2 root root 4096 Apr 28 18:18 pkgconfig

cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
cd /etc/ld.so.conf.d/
echo "/usr/local/libtasn1-0.3.10/lib" > libtasn1-0.3.10.conf

/sbin/ldconfig
ldd /usr/bin/mutt

libtasn1.so.3 => /usr/local/libtasn1-0.3.10/lib/libtasn1.so.3 (0x00007fd6105b6000)

mutt -v
Mutt 1.5.20 (2009-12-10)

至此问题解决。

CentOS 6 编译 libnl-3.2.25

一、有一个软件编译的时候提示为:“libnl3: no”,解决方法是安装 libnl。这里选择编译安装最新版 libnl-3.2.25.tar.gz,编译过程如下:

wget http://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz
tar zxvf libnl-3.2.25.tar.gz
cd libnl-3.2.25
./configure --prefix=/usr/
make && make install

二、执行 ./configure 后有如下提示:

-------------------------------------------------------------------------------
                                  NOTE

 There have been some changes starting with 3.2 regarding where and how libnl
 is being installed on the system in order to allow multiple libnl versions
 to be installed in parallel:

    - Headers will be installed in ${prefix}/include/libnl3, therefore
      you will need to add "-I/usr/include/libnl3" to CFLAGS

    - The library basename was renamed to libnl-3, i.e. the SO names become
      libnl-3.so., libnl-route-3.so, etc.

    - libtool versioning was assumed, to ease detection of compatible library
      versions.

 If you are using pkg-config for detecting and linking against the library 
 things will continue magically as if nothing every happened. If you are 
 linking manually you need to adapt your Makefiles or switch to using 
 pkg-config files.

-------------------------------------------------------------------------------

三、再次编译那个软件的时候需要先执行如下命令,让编译能找到对应的lib

export LIBGNUTLS_LIBS="-L/usr/lib/ -lgnutls"
export LIBGNUTLS_CFLAGS="-I/usr/include/"

export LIBNL3_CFLAGS="-I/usr/include/libnl3"
export LIBNL3_LIBS="-L/usr/lib/ -lnl-3 -lnl-route-3"

四、检查是否安装成功

# pkg-config --cflags --libs libnl-xfrm-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-xfrm-3 -lnl-3  
# pkg-config --cflags --libs libnl-nf-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-nf-3 -lnl-route-3 -lnl-3  
# pkg-config --cflags --libs libnl-route-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-route-3 -lnl-3  
# pkg-config --cflags --libs libnl-genl-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-genl-3 -lnl-3

五、libnl3 是什么?
核心库(core library)提供了使用 netlink 套接字进行通信的基础功能。它处理套接字的连接建立和断开、发送和接收数据、构造和解析消息、提供可配置的接收状态机。除此之外它还提供了一套抽象数据类型的框架,这套框架使得基于对象的 netlink 协议实现起来更加的简单,在这种协议中,对象可以通过基于 netlink 的协议来添加、删除、或者修改。
具体请阅读如下链接: http://blog.guorongfei.com/netlink/2015/01/20/libnl-translation-part1.html