(转)Linux 上的基础网络设备详解

(转)Linux 上的基础网络设备详解

http://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/

抽象网络设备的原理及使用

网络虚拟化是 Cloud 中的一个重要部分。作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理、用法、数据流向。您通过此文,能够知道如何使用 Linux 的基础网络设备进行配置以达到特定的目的,分析出 Linux 可能的网络故障原因。

夏 文超, 软件工程师, IBM

2013 年 10 月 28 日

  • +内容

Linux 抽象网络设备简介

和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。一个常见的情况是,系统里装有一个硬件网卡,Linux 会在系统里为其生成一个网络设备实例,如 eth0,用户需要对 eth0 发出命令以配置或使用它了。更多的硬件会带来更多的设备实例,虚拟的硬件也会带来更多的设备实例。随着网络技术,虚拟化技术的发展,更多的高级网络设备被加入了到了 Linux 中,使得情况变得更加复杂。在以下章节中,将一一分析在虚拟化技术中经常使用的几种 Linux 网络设备抽象类型:Bridge、802.1.q VLAN device、VETH、TAP,详细解释如何用它们配合 Linux 中的 Route table、IP table 简单的创建出本地虚拟网络。

相关网络设备工作原理

Bridge

Bridge(桥)是 Linux 上用来做 TCP/IP 二层协议交换的设备,与现实世界中的交换机功能相似。Bridge 设备实例可以和 Linux 上其他网络设备实例连接,既 attach 一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge 会根据报文中的 MAC 信息进行广播、转发、丢弃处理。

图 1.Bridge 设备工作过程

Bridge 设备工作过程如图所示,Bridge 的功能主要在内核里实现。当一个从设备被 attach 到 Bridge 上时,相当于现实世界里交换机的端口被插入了一根连有终端的网线。这时在内核程序里,netdev_rx_handler_register()被调用, 一个用于接受数据的回调函数被注册。以后每当这个从设备收到数据时都会调用这个函数可以把数据转发到 Bridge 上。当 Bridge 接收到此数据时,br_handle_frame()被调用,进行一个和现实世界中的交换机类似的处理过程:判断包的类别(广播/单点),查找内部 MAC 端口映射表,定位目标端口号,将数据转发到目标端口或丢弃,自动更新内部 MAC 端口映射表以自我学习。

Bridge 和现实世界中的二层交换机有一个区别,图中左侧画出了这种情况:数据被直接发到 Bridge 上,而不是从一个端口接受。这种情况可以看做 Bridge 自己有一个 MAC 可以主动发送报文,或者说 Bridge 自带了一个隐藏端口和寄主 Linux 系统自动连接,Linux 上的程序可以直接从这个端口向 Bridge 上的其他端口发数据。所以当一个 Bridge 拥有一个网络设备时,如 bridge0 加入了 eth0 时,实际上 bridge0 拥有两个有效 MAC 地址,一个是 bridge0 的,一个是 eth0 的,他们之间可以通讯。由此带来一个有意思的事情是,Bridge 可以设置 IP 地址。通常来说 IP 地址是三层协议的内容,不应该出现在二层设备 Bridge 上。但是 Linux 里 Bridge 是通用网络设备抽象的一种,只要是网络设备就能够设定 IP 地址。当一个 bridge0 拥有 IP 后,Linux 便可以通过路由表或者 IP 表规则在三层定位 bridge0,此时相当于 Linux 拥有了另外一个隐藏的虚拟网卡和 Bridge 的隐藏端口相连,这个网卡就是名为 bridge0 的通用网络设备,IP 可以看成是这个网卡的。当有符合此 IP 的数据到达 bridge0 时,内核协议栈认为收到了一包目标为本机的数据,此时应用程序可以通过 Socket 接收到它。一个更好的对比例子是现实世界中的带路由的交换机设备,它也拥有一个隐藏的 MAC 地址,供设备中的三层协议处理程序和管理程序使用。设备里的三层协议处理程序,对应名为 bridge0 的通用网络设备的三层协议处理程序,即寄主 Linux 系统内核协议栈程序。设备里的管理程序,对应 bridge0 寄主 Linux 系统里的应用程序。

Bridge 的实现当前有一个限制:当一个设备被 attach 到 Bridge 上时,那个设备的 IP 会变的无效,Linux 不再使用那个 IP 在三层接受数据。举例如下:如果 eth0 本来的 IP 是 192.168.1.2,此时如果收到一个目标地址是 192.168.1.2 的数据,Linux 的应用程序能通过 Socket 操作接受到它。而当 eth0 被 attach 到一个 bridge0 时,尽管 eth0 的 IP 还在,但应用程序是无法接受到上述数据的。此时应该把 IP 192.168.1.2 赋予 bridge0。

另外需要注意的是数据流的方向。对于一个被 attach 到 Bridge 上的设备来说,只有它收到数据时,此包数据才会被转发到 Bridge 上,进而完成查表广播等后续操作。当请求是发送类型时,数据是不会被转发到 Bridge 上的,它会寻找下一个发送出口。用户在配置网络时经常忽略这一点从而造成网络故障。

VLAN device for 802.1.q

VLAN 又称虚拟网络,是一个被广泛使用的概念,有些应用程序把自己的内部网络也称为 VLAN。此处主要说的是在物理世界中存在的,需要协议支持的 VLAN。它的种类很多,按照协议原理一般分为:MACVLAN、802.1.q VLAN、802.1.qbg VLAN、802.1.qbh VLAN。其中出现较早,应用广泛并且比较成熟的是 802.1.q VLAN,其基本原理是在二层协议里插入额外的 VLAN 协议数据(称为 802.1.q VLAN Tag),同时保持和传统二层设备的兼容性。Linux 里的 VLAN 设备是对 802.1.q 协议的一种内部软件实现,模拟现实世界中的 802.1.q 交换机。

图 2 .VLAN 设备工作过程

图 2 .VLAN 设备工作过程如图所示,Linux 里 802.1.q VLAN 设备是以母子关系成对出现的,母设备相当于现实世界中的交换机 TRUNK 口,用于连接上级网络,子设备相当于普通接口用于连接下级网络。当数据在母子设备间传递时,内核将会根据 802.1.q VLAN Tag 进行对应操作。母子设备之间是一对多的关系,一个母设备可以有多个子设备,一个子设备只有一个母设备。当一个子设备有一包数据需要发送时,数据将被加入 VLAN Tag 然后从母设备发送出去。当母设备收到一包数据时,它将会分析其中的 VLAN Tag,如果有对应的子设备存在,则把数据转发到那个子设备上并根据设置移除 VLAN Tag,否则丢弃该数据。在某些设置下,VLAN Tag 可以不被移除以满足某些监听程序的需要,如 DHCP 服务程序。举例说明如下:eth0 作为母设备创建一个 ID 为 100 的子设备 eth0.100。此时如果有程序要求从 eth0.100 发送一包数据,数据将被打上 VLAN 100 的 Tag 从 eth0 发送出去。如果 eth0 收到一包数据,VLAN Tag 是 100,数据将被转发到 eth0.100 上,并根据设置决定是否移除 VLAN Tag。如果 eth0 收到一包包含 VLAN Tag 101 的数据,其将被丢弃。上述过程隐含以下事实:对于寄主 Linux 系统来说,母设备只能用来收数据,子设备只能用来发送数据。和 Bridge 一样,母子设备的数据也是有方向的,子设备收到的数据不会进入母设备,同样母设备上请求发送的数据不会被转到子设备上。可以把 VLAN 母子设备作为一个整体想象为现实世界中的 802.1.q 交换机,下级接口通过子设备连接到寄主 Linux 系统网络里,上级接口同过主设备连接到上级网络,当母设备是物理网卡时上级网络是外界真实网络,当母设备是另外一个 Linux 虚拟网络设备时上级网络仍然是寄主 Linux 系统网络。

需要注意的是母子 VLAN 设备拥有相同的 MAC 地址,可以把它当成现实世界中 802.1.q 交换机的 MAC,因此多个 VLAN 设备会共享一个 MAC。当一个母设备拥有多个 VLAN 子设备时,子设备之间是隔离的,不存在 Bridge 那样的交换转发关系,原因如下:802.1.q VLAN 协议的主要目的是从逻辑上隔离子网。现实世界中的 802.1.q 交换机存在多个 VLAN,每个 VLAN 拥有多个端口,同一 VLAN 端口之间可以交换转发,不同 VLAN 端口之间隔离,所以其包含两层功能:交换与隔离。Linux VLAN device 实现的是隔离功能,没有交换功能。一个 VLAN 母设备不可能拥有两个相同 ID 的 VLAN 子设备,因此也就不可能出现数据交换情况。如果想让一个 VLAN 里接多个设备,就需要交换功能。在 Linux 里 Bridge 专门实现交换功能,因此将 VLAN 子设备 attach 到一个 Bridge 上就能完成后续的交换功能。总结起来,Bridge 加 VLAN device 能在功能层面完整模拟现实世界里的 802.1.q 交换机。

Linux 支持 VLAN 硬件加速,在安装有特定硬件情况下,图中所述内核处理过程可以被放到物理设备上完成。

TAP 设备与 VETH 设备

TUN/TAP 设备是一种让用户态程序向内核协议栈注入数据的设备,一个工作在三层,一个工作在二层,使用较多的是 TAP 设备。VETH 设备出现较早,它的作用是反转通讯数据的方向,需要发送的数据会被转换成需要收到的数据重新送入内核网络层进行处理,从而间接的完成数据的注入。

图 3 .TAP 设备和 VETH 设备工作过程

图 3 .TAP 设备和 VETH 设备工作过程如图所示,当一个 TAP 设备被创建时,在 Linux 设备文件目录下将会生成一个对应 char 设备,用户程序可以像打开普通文件一样打开这个文件进行读写。当执行 write()操作时,数据进入 TAP 设备,此时对于 Linux 网络层来说,相当于 TAP 设备收到了一包数据,请求内核接受它,如同普通的物理网卡从外界收到一包数据一样,不同的是其实数据来自 Linux 上的一个用户程序。Linux 收到此数据后将根据网络配置进行后续处理,从而完成了用户程序向 Linux 内核网络层注入数据的功能。当用户程序执行 read()请求时,相当于向内核查询 TAP 设备上是否有需要被发送出去的数据,有的话取出到用户程序里,完成 TAP 设备的发送数据功能。针对 TAP 设备的一个形象的比喻是:使用 TAP 设备的应用程序相当于另外一台计算机,TAP 设备是本机的一个网卡,他们之间相互连接。应用程序通过 read()/write()操作,和本机网络核心进行通讯。

VETH 设备总是成对出现,送到一端请求发送的数据总是从另一端以请求接受的形式出现。该设备不能被用户程序直接操作,但使用起来比较简单。创建并配置正确后,向 其一端输入数据,VETH 会改变数据的方向并将其送入内核网络核心,完成数据的注入。在另一端能读到此数据。

网络设置举例说明

为了更好的说明 Linux 网络设备的用法,下面将用一系列的例子,说明在一个复杂的 Linux 网络元素组合出的虚拟网络里,数据的流向。网络设置简介如下:一个中心 Bridge:bridge0 下 attach 了 4 个网络设备,包括 2 个 VETH 设备,1 个 TAP 设备 tap0,1 个物理网卡 eth0。在 VETH 的另外一端又创建了 VLAN 子设备。Linux 上共存在 2 个 VLAN 网络,既 vlan100 与 vlan200。物理网卡和外部网络相连,并且在它之下创建了一个 VLAN ID 为 200 的 VLAN 子设备。

从 vlan100 子设备发送 ARP 报文

图 4 .ARP from vlan100 child device

图 4 .ARP from vlan100 child device如图所示,当用户尝试 ping 192.168.100.3 时,Linux 将会根据路由表,从 vlan100 子设备发出 ARP 报文,具体过程如下:

1) 用户 ping 192.168.100.3

2) Linux 向 vlan100 子设备发送 ARP 信息。

3) ARP 报文被打上 VLAN ID 100 的 Tag 成为 ARP@vlan100,转发到母设备上。

4) VETH 设备将这一发送请求转变方向,成为一个需要接受处理的报文送入内核网络模块。

5) 由于对端的 VETH 设备被加入到了 bridge0 上,并且内核发现它收到一个报文,于是报文被转发到 bridge0 上。

6) bridge0 处理此 ARP@vlan100 信息,根据 TCP/IP 二层协议发现是一个广播请求,于是向它所知道的所有端口广播此报文,其中一路进入另一对 VETH 设备的一端,一路进入 TAP 设备 tap0,一路进入物理网卡设备 eth0。此时在 tap0 上,用户程序可以通过 read()操作读到 ARP@vlan100,eth0 将会向外界发送 ARP@vlan100,但 eth0 的 VLAN 子设备不会收到它,因为此数据方向为请求发送而不是请求接收。

7) VETH 将请求方向转换,此时在另一端得到请求接受的 ARP@vlan100 报文。

8) 对端 VETH 设备发现有数据需要接受,并且自己有两个 VLAN 子设备,于是执行 VLAN 处理逻辑。其中一个子设备是 vlan100,与 ARP@vlan100 吻合,于是去除 VLAN ID 100 的 Tag 转发到这个子设备上,重新成为标准的以太网 ARP 报文。另一个子设备由于 ID 不吻合,不会得到此报文。

9) 此 VLAN 子设备又被 attach 到另一个桥 bridge1 上,于是转发自己收到的 ARP 报文。

10) bridge1 广播 ARP 报文。

11) 最终另外一个 TAP 设备 tap1 收到此请求发送报文,用户程序通过 read()可以得到它。

从 vlan200 子设备发送 ARP 报文

图 5 .ARP from vlan200 child device

图 5 .ARP from vlan200 child device和前面情况类似,区别是 VLAN ID 是 200,对端的 vlan200 子设备设置为 reorder_hdr = 0,表示此设备被要求保留收到的报文中的 VLAN Tag。此时子设备会收到 ARP 报文,但是带了 VLAN ID 200 的 Tag,既 ARP@vlan200。

从中心 bridge 发送 ARP 报文

图 5 .ARP from central bridge

图 5 .ARP from central bridge当 bridge0 拥有 IP 时,通过 Linux 路由表用户程序可以直接将 ARP 报文发向 bridge0。这时 tap0 和外部网络都能收到 ARP,但 VLAN 子设备由于 VLAN ID 过滤的原因,将收不到 ARP 信息。

从外部网络向物理网卡发送 ARP@vlan200 报文

图 6 .ARP from external network

图 6 .ARP from external network当外部网络连接在一个支持 VLAN 并且对应端口为 vlan200 时,此情况会发生。此时所有的 VLAN ID 为 200 的 VLAN 子设备都将接受到报文,如果设置 reorder_hdr=0 则会收到带 Tag 的 ARP@vlan200。

从 TAP 设备以 ping 方式发送 ARP

图 7 .ping from TAP device

图 7 .ping from TAP device给 tap0 赋予 IP 并加入路由,此时再 Ping 其对应网段的未知 IP 会产生 ARP 发送请求。需要注意的是此时由于 tap0 上存在的是发送而不是接收请求,因此 ARP 报文不会被转发到桥上,从而什么也不会发生。图中右边画了一个类似情况:从 vlan200 子设备发送 ARP 请求。由于缺少 VETH 设备反转请求方向,因此报文也不会被转发到桥上,而是直接通过物理网卡发往外部网络。

以文件操作方式从 TAP 设备发送报文

图 8 .file operation on TAP device

图 8 .file operation on TAP device用户程序指定 tap0 设备发送报文有两种方式:socket 和 file operation。当用 socket_raw 标志新建 socket 并指定设备编号时,可以要求内核将报文从 tap0 发送。但和前面的 ping from tap0 情况类似,由于报文方向问题,消息并不会被转发到 bridge0 上。当用 open()方式打开 tap 设备文件时,情况有所不同。当执行 write()操作时,内核认为 tap0 收到了报文,从而会触发转发动作,bridge0 将收到它。如果发送的报文如图所示,是一个以 A 为目的地的携带 VLAN ID 100 Tag 的单点报文,bridge0 将会找到对应的设备进行转发,对应的 VLAN 子设备将收到没有 VLAN ID 100 Tag 的报文。

Linux 上配置网络设备命令举例

以 Redhat6.2 红帽 Linux 发行版为例,如果已安装 VLAN 内核模块和管理工具 vconfig,TAP/TUN 设备管理工具 tunctl,那么可以用以下命令设置前述网络设备:

  • 创建 Bridge:brctl addbr [BRIDGE NAME]
  • 删除 Bridge:brctl delbr [BRIDGE NAME]
  • attach 设备到 Bridge:brctl addif [BRIDGE NAME] [DEVICE NAME]
  • 从 Bridge detach 设备:brctl delif [BRIDGE NAME] [DEVICE NAME]
  • 查询 Bridge 情况:brctl show
  • 创建 VLAN 设备:vconfig add [PARENT DEVICE NAME] [VLAN ID]
  • 删除 VLAN 设备:vconfig rem [VLAN DEVICE NAME]
  • 设置 VLAN 设备 flag:vconfig set_flag [VLAN DEVICE NAME] [FLAG] [VALUE]
  • 设置 VLAN 设备 qos:

vconfig set_egress_map [VLAN DEVICE NAME] [SKB_PRIORITY] [VLAN_QOS]

vconfig set_ingress_map [VLAN DEVICE NAME] [SKB_PRIORITY] [VLAN_QOS]

  • 查询 VLAN 设备情况:cat /proc/net/vlan/[VLAN DEVICE NAME]
  • 创建 VETH 设备:ip link add link [DEVICE NAME] type veth
  • 创建 TAP 设备:tunctl -p [TAP DEVICE NAME]
  • 删除 TAP 设备:tunctl -d [TAP DEVICE NAME]
  • 查询系统里所有二层设备,包括 VETH/TAP 设备:ip link show
  • 删除普通二层设备:ip link delete [DEVICE NAME] type [TYPE]

小结

综上所述,Linux 已经提供一套基本工具供用户创建出各种内部网络,利用这些工具可以方便的创建出特定网络给应用程序使用,包括云计算中的初级内部虚拟网络。

参考资料

学习

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

Setup PPTP client on wnr200v3

Configure PPTP client of ddwrt

Add start-up command as following:

#!/bin/sh
sleep 120
PPTPSERVER=$(/usr/sbin/nvram get pptpd_client_srvip)
PPTPGWY=$(/usr/sbin/nvram get wan_gateway)
/sbin/route add -host $PPTPSERVER gw $PPTPGWY dev vlan2
/sbin/route del default
/sbin/route add default gw $PPTPGWY metric 100
/sbin/route add default dev ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

GPG 加密文件

生成密钥:       gpg   --gen-key

列出公钥:       gpg  --list-keys

列出私钥:       gpg  --list-secret-keys

导出公钥:       gpg  [-a]  -o key.pub  --export  [ID]

导出私钥:       gpg  [-a] -o key.priv    --export-secret-key [ID]

公布公钥:       gpg  --send-keys   ID

搜索公钥:       gpg --search-keys  [ID or Name]
 
检查公钥:        gpg  --fingerprint    [ID]
导入公钥:     gpg        --import   key.pub
导入私钥:     gpg        --import   key,priv



加密文件:  
                      test.txt  ==> test.txt.asc     
                         gpg  -e -a -r zhenglei test.txt
                      
                      test.txt  ==> test.txt.pgp
                         gpg  -e -r zhenglei test.txt


解密文件:
          gpg  -d   test.txt.asc
          gpg  -o   test.txt    -d  test.txt.asc 
          
          gpg  -d   test.txt.gpg
          gpg  -o   test.txt   -d  test.txt.gpg


===============================================
签名:  
     x1 ==> x1.gpg
          gpg -s x1

   x1 ==>  x1.asc
          gpg --clearsign x1

  x1  ==>  x1 + x1.sig 
        gpg -b x1


  x1  ==> x1 + x1.asc
        gpg -a -b x1


 验证签名:
     gpg   --verify   x1.asc
     gpg   --verify   x1.sig
     gpg   --verify   x1.gpg



加密并签名
   gpg  [-u Sender]    [-r Recipient ]   [-a]  -s -e  filename

解密并验证:
  gpg  -d  filename.asc

http://www.oschina.net/translate/pgp-tutorial
http://www.huangwei.me/blog/2010/10/25/gnupg-quickstart/

1099耶路撒冷大屠杀

送交者: bamboo 于 北京时间 01/04/2009 () [累积31495分 给bamboo发悄悄话]

主题:1099耶路撒冷大屠杀

[史海钩沉] 1099耶路撒冷大屠杀-圣墓守护者 戈弗雷

第一次十字军东征
1099耶路撒冷大屠杀

布 永的戈弗雷(Godefroy de Bouillon,约1060年-1100年7月18日,耶路撒冷),下洛林公爵(1087年-1096年,称高德弗鲁瓦四世),布永伯爵(1076年 -1096年)和第一次十字军的将领。布洛涅(Boulogne)的尤斯塔斯二世的次子。

第一次十字军东征是教皇应东罗马皇帝之请而号召来抵抗土耳其人收复圣地耶路撒冷,那么战利品也无非该归两个人,一是教皇,二是拜占廷皇帝。

依 照十字军首领们和东罗马皇帝的约定,十字军收复的领土都该交给拜占廷皇帝,但是十字军一旦夺取了土地就立即为自己建立邦国并拒绝交还给拜占廷,这种行动愈 演愈烈,安条克公国(1098~1268)、埃德萨伯国(1098~1144)和的黎波里伯国(1109 ~1289)等伯国到公国都相继建立。

1096年8月15日,戈弗雷公爵和他的兄弟布洛涅的鲍德温(Baudouin de Boulogne 后来的鲍德温一世)率领德意志西部十字军的队伍,前往圣地耶路撒冷。

1097年戈弗雷在多利留姆(Dorylaeum)击败鲁姆苏丹国,布洛涅的鲍德温占领了埃德萨及其附近地区,1098年6月3日攻陷叙利亚安条克。

十字军一路对回教徒实行三光政策-杀光、抢光、奸光,无恶不做的往耶路撒冷前进。

1099年6月7日,十字军终于看到了耶路撒冷的城墙,戈弗雷的四万十字军(其中精兵二万)抵达耶路撒冷城下并将此城围困,城中土耳其守军不过千人。

宗教狂热在此时达到了顶峰,十字军坚信自己必然光复圣地。为了表示虔诚,十字军全体斋戒,并举行了各种各样形形色色的宗教仪式。

令他们吃惊的是6月13日的第一次进攻居然失败了。原因很简单,他们攻坚战素养极差的老毛病又犯了,而且这次没有人会给他们提供装备了。

屡战屡败的十字军并不甘心。为了求得上帝的帮助,他们决定严格遵照《旧约》中攻打耶利哥的方法。他们在7月8日再次斋戒,然后由教士领着,全体赤脚绕城一周,边走边大喊大叫。

当然耶路撒冷城墙不会因此而倒塌,不过倒也带来了一些不错的效果:一支热那亚舰队抵达刚刚占领不久的雅法,为十字军提供了建造器械急需的木材。

耶路撒冷城用巨石砌成的城墙高大雄伟十分坚固,十字军架木梯攻城未能成功。于是攻守双方陷入相持阶段。后来,十字军又用在周围各地抢劫的木材制造攻城器械--攻城塔。

攻城塔分成多层,塔中埋伏攻城人员,外面覆盖以坚硬的牛皮,塔下设有攻城槌。攻城槌由一根巨型树干截锯而成,头部为羊头形尖锐器,通过杠杆原理加上人力,槌头可迅速在坚硬的城墙上撞击出一个窟窿。一个多月以后,十字军使用攻城塔攻城。

穆斯林守军也拼死进行顽强的抵抗;他们在墙上用沸腾的热油泼向攻城塔,并向攻城塔投出火炬,十字军被烫死和烧死许多。

但是,经过很长时间的攻打,城墙被打开一个缺口,十字军用点燃的木材放起火来,趁着大火的蔓延,十字军终于在7月15日中午时分攻进耶路撒冷,经过激烈的巷战,穆斯林守军终不能支。

戈弗雷率领的北路军率先杀进城里。在完全控制城市之后,就是一次可怕的洗劫与屠杀。

耶路撒冷陷落,十字军遂大开杀戒,几乎发疯的十字军见人就杀,耶路撒冷成了人肉加工场。

穆斯林平民,无论男女老幼,大多惨遭杀戮;逃到犹太教堂的犹太人,则是被活着烧死;而原来居住在圣城的基督徒,也难逃十字军的杀人魔掌;仅在阿克萨清真寺,就有一万(一说为七万)多异教徒被屠杀,血水漫过脚踝。

十字军们甚至夸耀说,自己是在没膝深的血流中走过圣地的。

亲身参与这一暴行的福尔克里·沙特尔在《耶路撒冷史》中描述到,站在那里的人,从脚面直到大腿都浸透着死人的鲜血。在大街小巷和广场上,到处都是人头滚滚,到处都堆满人的手脚、四肢。

十字军暴徒为了搜寻黄金和金币,又将死人的肚皮剖开查验;暴徒们很快就觉得,一个一个地剖开肚皮显然太麻烦,于是,他们干脆就一连数日把尸体堆起来烧成灰烬,为的是更容易地从灰烬中寻找黄金和金币。

十字军在耶路撒冷四处劫掠,他们还下达了这样一条命令--

谁先闯进某家的宅院,谁就是宅院的主人。

整座城市被洗劫一空,十字军士兵则一夜暴富……接下来是十字军的阅兵仪式,骑兵的马蹄子在战鼓声中踏着异教徒的尸体呼啸而过。

他们的残暴震惊了伊斯兰世界,穆斯林编年史学家毫不留情地将这些从未见过的十字军,称作“一群凶狠善战的畜牲”。1099耶路撒冷大屠杀历史学家估计有10万多人遇害。

耶路撒冷十字军屠夫戈弗雷留守和统治耶路撒冷及周围地区,他拒绝称国王,而是在圣城里选了一个自负的称号,称为圣墓守护者(圣墓卫士,Advocatus Sancti Sepulchri)。

(Kingdoms最强步兵-安条克公国圣墓卫士)

戈弗雷拒绝称国王,是因为耶路撒冷是圣地是朝圣和十字军远征的目的地,罗马教皇和拜占庭皇帝都盯着耶路撒冷,教皇明确宣布耶苏戴上棘冠的地方不能有俗人称王,所以戈弗雷才自称圣墓守护者,而避免了与罗马教廷发生冲突。

次年戈弗雷即去世,戈弗雷传闻被回教领袖派人毒死或死于长期慢性病的药剂过量,他的兄弟布洛涅的鲍德温即位为王,称鲍德温一世。特立独行的鲍德温一世他却毫不犹豫的宣布自己为耶路撒冷王。(Kingdom of Jerusalem)
by cwj36 | 2008-06-26 09:31 | 【教皇、骑士团篇】

以货币为矛,金融为盾,犹太人的崛起

时间:2012-08-26 13:05   来源:中国台湾网

  历史学家可以说谎,但历史不行。

——乔治圣茨伯里

史笔是埋葬真相最卑劣且最有效的手段。汤因比认为一些历史学家被政治势力所控制,他们在政治博弈中以百科全书的姿态出现,为政客们所利用。而更 多的历史学家则陷于自己的主观情结中难以自拔,从希罗多德①到布劳岱尔②,都难以做到不带立场,相对而言费弗尔③与布洛克④的早期年鉴学派似乎更为严谨一 些。

移动时间的坐标,让我们重新回到公元750年。由于查士丁尼瘟疫导致拜占庭帝国开始衰落,而与此同时,在当初被查士丁尼所征服的东哥特王国的土 地上,日耳曼民族的伦巴第人开始发起了疯狂的进攻,并成功占领了这片区域。这是一个疯狂的民族,他们为了得到这块土地,在过去的183年里陆陆续续地不断 发起进攻,这次终于达成心愿,将拜占庭势力彻底逐出。

伦巴第人只不过是一群原本生活在黑海沿岸的游牧部落而已,假如没有暴发那场可怕的瘟疫,那么这个部落的战斗力与拜占庭帝国相比如同大象眼中的一 条草蛇。但历史是无法假设的,事实摆在眼前,拜占庭帝国丢失了自己在意大利的领土,这使得意大利的罗马教会摆脱了拜占庭的控制。之后若干年,拜占庭君主利 奥三世为了剥夺教会权贵们的财富而发动了“破坏神像运动”,导致罗马教会与拜占庭帝国的彻底决裂。之后,罗马教会为了不被伦巴第人消灭,教皇斯蒂芬三世翻 过阿尔卑斯山,为自己找到了新的靠山,即后来建立加洛林王朝的矮子丕平。

丕平为了名正言顺地成为法兰克国王,向前来求助的罗马教会提出以承认自己的名份为条件,出兵攻打伦巴第人。双方都觉得自己讨了便宜,于是协议顺 利达成。丕平将伦巴第人赶出意大利之后,脑子一热将得来的土地全都送给了罗马教会,这让罗马教会有了与拜占庭分庭抗礼的基础,罗马教会正式独立成为教皇 国。

教皇国的成立使意大利成为了基督教重镇。教会势力得到了巩固与发展,但这股势力的崛起从某种意义上讲,是一次极大的灾难,重点在于这场灾难所造 成的后果时至今日令我们欲哭无泪。当你听罢这个故事,无论你感到多么无奈和不可思议,你都只能选择接受,我们正在品尝着这枚苦果。

公元1095年冬初,罗马教皇乌尔班二世在法国发表了一场激动人心的演说,随之发动了第一次十字军东征。在西方史料里有这样一句话:十字军东征是欧洲封建经济发展的需要。这句话听上去似乎是对东征持肯定的态度,而在事实面前,这种评论则显得苍白无力。

如果一个人深思熟虑之后决定做一件事情,那么这件事情一定是存在着逻辑的。到现在为止,多数人仍然认为东征是宗教冲突,这是惰于思考的结果。你 信上帝我不信,你就要杀我,这种逻辑是怎么讲都讲不通的。一个卫道士发疯还可以理解,十万人跟着一起发疯?而且是以流血为代价的发疯,这绝不可能仅仅是单 纯的卫道。

整件事情得从公元8世纪谈起。8世纪至9世纪,阿拉伯帝国开始崛起,阿拉伯人的足迹遍布东西方,商道绵长。他们在东瀛收购玳瑁和玛瑙,又在中国 收购丝瓷和茶叶,通过与中国建立贸易往来而使丝绸之路再次繁荣,将东南亚的海珍和唐朝的丝瓷等货运至地中海,然后卖给罗马帝国,其势力之大可想而知。

时值阿拉伯帝国阿巴斯王朝时代,由于国家财富的大量积累和海陆贸易的不断扩张,阿巴斯王朝的皇帝拉希德哈里发出于安全问题考虑,将赛尔柱突厥人收编麾下作为护卫军,用以保护商船与财产。这是这位开创阿拉伯帝国鼎盛时代的伟大帝王一生中最大的败笔。

公元1040年,由于阿拉伯帝国的分裂,这支原本用于保卫国家财产的军队搞起了篡权,建立了塞尔柱帝国。之后它的势力不断扩大,并占领了小亚细 亚。在塞尔柱帝国占踞小亚细亚之后,罗马教廷四处散布谣言,称塞尔柱人如何如何迫害前往耶路撒冷朝圣的基督徒云云,挑起了与伊斯兰教的冲突。事实上,塞尔 柱人并未做过这些坏事,由于塞尔柱帝国的势力不断扩张,导致他们内部夺权冲突频发,根本无暇顾及这些。

现在有许多人对古罗马时代充满神往,脑子里浮现的是华丽的建筑与浪漫的骑士等,事实上这一切都只存在于小说和电影里。仅11世纪100年里,原 法兰克一带就有27个年头颗粒无收,饥荒持续时间最长的一次达7年之久,这在现在是不可想象的。11世纪末,拜占庭帝国由于常年的兵荒马乱和经济萧条,导 致大量骑士贵族破产。因为骑士是没有领地的贵族,所以经济崩溃导致了他们成为第一批倒霉虫。这些破产了的骑士劣性不改,仍然幻想着过去穷奢极欲的生活,渴 慕着那些来自东方的奢侈品,于是他们开始合起伙来打家劫舍,烧杀抢掠。为了得到金钱,这些人除了好事之外什么事都干得出来。但经济萧条,老百姓也穷,就在 这帮骑士苦恼万分之际,塞尔柱帝国宣布要攻占君士坦丁堡,这让时任拜占庭君主的阿里科修斯眼前一黑,差点厥过气儿去。

无奈之下阿里科修斯只得跑去向罗马教皇求助,罗马教皇一听,心想这是个好机会,于是便答应出兵援助。到这里又回到了故事开始的地方,罗马教皇乌 尔班二世发表了激动人心的演讲,称以上帝之名招募军队,其实大家心里都清楚是怎么回事儿。一时间,那些渴望发财的穷酸老百姓和失去理智的骑士纷纷前来应 征。教廷给每一位应征的人都配发了一枚十字架,并举行誓师大会。自此,第一次十字军东征正式拉开帷幕。

自中世纪起的阿拉伯帝国与后来的塞尔柱帝国在经济发展上存在着一个共同点,那就是他们都是以生产和运输为主导的实体经济,包括当时的中国、日 本,也都是以这类经济为主导。这种经济发展模式可以有效推动生产力的发展,这是毋庸置疑的。劳动者为了提高生产效率和防止被淘汰,不得不在效率、成本和质 量上下工夫,间接促进了生产技术的创新。但是对于一些人而言,这种经济模式是其无法涉足的,因它的先决条件是必须拥有稳定的生产场所,充沛的生产资料以及 强大的军队,前两者是生产力的保障,后者则是利益不受侵害的保障,这三个条件缺一不可。

自查士丁尼瘟疫暴发至文艺复兴之前,整个欧洲基本上处在兵荒马乱、战火纷飞的状态里,加之教廷为巩固统治,用各种谬论不断地荼毒人心,弱肉强食 的丛林法则不断蔓延。在这种情况下,这一批人从理论上讲是很有可能被淘汰的,但上天的安排往往令世人难以琢磨,这群人经过几百年漫长的进化,逐渐拥有了极 高的智商,用以填补其他方面的不足,这一批人便是犹太人。

到这里,你也许会认为上面的铺垫过于冗长乏味,但这如同舞台艺术那样,如若没有台下漫长而乏善可陈的磨练作为铺垫,观众就无法看到舞台上最为精彩的那一瞬间。

罗马帝国、阿拉伯帝国与塞尔柱帝国拥有自己的领土、资源以及军队,但犹太人却什么也没有。这种情况下,犹太人无法像前者那样依靠实体贸易来维持自己的生存,于是他们渐渐对金融产生了浓厚的兴趣。

金融的本质是信用风险的计算,犹太人清楚看到了这一点。自古罗马分治之后,经济动荡不安,他们中间比较聪明的家伙便开始在权贵与平民之间游走,用那些在东西方贸易中做中间商得来的钱开始放贷,利用贵族的贪欲和平民的刚性需求赚取利息。

自巴比伦王朝以来,犹太人在欧洲就一直处于弱势。“大疏散”之后,只有查理大帝愿意收留他们,这使得许多犹太人得以在莱茵河沿岸聚集,有了相对 稳定的从事商贸活动的场所,但仍处于流亡的境遇。虽然欧洲大部分区域“排犹”历史悠久,但真正对犹太人进行大规模迫害则是从第一次十字军东征时期开始的。 在教皇发动第一次东征前夕,一个叫做“隐士彼得”的家伙就已经率领了一群想发财的乌合之众沿着东征的反方向开始了劫掠征途。由于军费开支难以解决,他们便 瞄准了与自己一水相隔的犹太人。为了抢夺犹太商人的财产而杀害了大量犹太人,这让在德国伏姆斯的犹太人有了大难临头的预感,于是四处寻求庇护。恰逢此时, 当地的基督教会主动出面向犹太人承诺将给予其安全,于是周边地区无数犹太人怀着感激之情迁入了伏姆斯基督教会的势力范围内,之后发生的事情,让这次小规模 的迁徙成了犹太人最后的信任。

十字军来了之后,伏姆斯教会非但未能履行当初的约定,反而逼迫犹太人改信基督教。他们深知这不可能时,故而有了合适的杀人借口,结果不出意外,无数拒绝接受基督教洗礼的犹太人被杀害。自这一刻起,犹太人处在了绝对的危机当中,如何生存下去,将是这个民族的第一命题。

从经济逻辑上分析,犹太人在东征期间遭遇迫害是在所难免的。十字军的主要构成人员以穷人居多,这些人大都是恶棍无赖以及将要活不下去的人,他们 当中许多人都是犹太商的债务人。如果你想将自己的债务一笔勾销,最简单的办法就是让债权人消失,所以犹太人成了东征的牺牲品。东征期间教廷还曾颁布法令: 凡是欠犹太人钱的人,只要加入十字军,则债务一律赦免。最令人发指的是公元1099年十字军在耶路撒冷的血腥屠杀。这年7月15日的黄昏,十字军攻占耶路 撒冷之后,对城里的犹太人实施了大规模的屠杀。三万余犹太人被活活烧死,随之一炬的还有大量的借贷契约,这让耶路撒冷的诸多商人和平民得到了解脱,不少人 欢呼着品尝这份胜利的喜悦。

在东征期间,意大利商人给予了十字军大量的补给,他们鼓励十字军将犹太人赶出欧洲,以便吞噬其商业贸易。自此之后犹太人元气大伤,过起了东躲西 藏的生活。在蛰伏了500余年之后,他们复国的意志非但未曾磨灭,反而变得更加坚定和深沉,这一点从《出埃及记》中便可洞悉。

以货币为矛,以金融为盾,进时可攻,退时可守。我不知道是谁最早想出这么个主意的,利用货币和金融来控制一个国家。犹太人中比较聪明的一些家伙 发明了这种游戏,这与古希腊“六一农”时期的金融是完全不同的两个概念,后者是为了敛财,前者则是为了自己民族的生存与发展,但两者所利用的条件是相同 的,那就是人类的贪婪与自私!

当一群犹太人聚集在一起的时候,他们为了防止被迫害,不得不想出种种办法来保全自己。经过思考之后,他们选择了用金融来保护自己。先前向贵族、 商人以及平民放贷而遭到屠杀的结局显示这条路行不通,那么怎样做才能行得通呢?最后,犹太人中间那些异常聪明的家伙们想到了一个词语,用现在的话讲叫做 “permeate”,渗透。

他们开始变得自私、吝啬、趋炎附势,通过各种手段接触到欧洲各国的权贵乃至君主,开始了各种各样的金融操作。这种经济活动与之前相比,从本质上 发生了改变,他们清楚地知道过去那种商业模式并不能给自己带来任何利益,因为缺乏相应的安全保障,所以开始利用一切可能的机会渗入到各国统治层内部进行游 说,向权贵们展示各种金融工具,从而燃起他们贪婪的本性。“用你的钱,为你赚钱!”成了犹太人的口头禅,他们告诉国王,你只要出一点点钱,我们用一些手段 操作之后,你就能获得1.3倍的财富,而我们需要的,仅仅是一点点中间费以及您的保护!国王一听,觉得很划算,于是便点头答应了,犹太人的金融王国从这一 刻起,便开始在欧洲生根发芽。

今天我们总在议论犹太人的经商头脑,并试图寻找他们智慧的来源,但当你读懂这段历史之后,你会发现犹太人的智慧是我们无法领悟的,那种经历了千 年苦难而酝酿出的生存哲学并非简单的对知识的掌握,而是在仇恨与无奈的逼迫下权衡利弊之后的选择。他们从那时起,便开始费心钻研经济与金融,尽最大努力帮 助他人赚取利润,从而得到一个栖身之所。这使得犹太人对经济金融的领悟远远超出世界其他任何一个民族与国家,而其操作手段是维护他们生存权利的根本所在, 因此外人无论是谁都不可能得到这份秘籍。他们当中掌握这些秘籍的大家族以代代相传的方式将它传于后人,甚至为了保护它而选择近亲结婚,被马克思誉为皇冠明 珠的罗斯柴尔德家族便是最典型的例子,神秘与辉煌的背后是这个苦难深重的民族隐隐发颤的身影。

当我们跨越历史长河去审视这一切,会发现十字军的九次东征对欧陆、北非及西亚地区所造成的全部灾难与影响都不及逐杀犹太人之过。假借上帝之名进 行的杀戮给一个拥有可怕头脑的民族埋下了仇恨的种子。他们的后代在几百年后席卷世界财富。此时此刻,就在华尔街,这些自私冷酷的家伙们控制着我们的食物、 能源以及我们手里的货币。一张巨大的金融网络笼罩在我们的头顶,一切都被他们所掌控,千万别指望他们的怜悯,祖先的阴影无须借助任何文字或语言来传承,那 是一种形而上的意识,烙印在大多数犹太人的心里。

编辑:刘莹