靈修分享:亞略巴古的演講

亞略巴古的演說是使徒行傳一篇非常著名的講道。基督徒往往用這段經文來說明上帝的屬性,同時也會參考這段經文作為和外邦人互動的一個參考方式。最近因為團契查經查到這一段,重新思想後看到了以前沒有考慮過的面向,在這邊記錄一下。

徒17:16-34保羅在雅典等候他們的時候,看見滿城都是偶像,就心裏着急;於是在會堂裏與猶太人和虔敬的人,並每日在市上所遇見的人,辯論。還有伊壁鳩魯和斯多亞兩門的學士,與他爭論。有的說:「這胡言亂語的要說甚麼?」有的說:「他似乎是傳說外邦鬼神的。」這話是因保羅傳講耶穌與復活的道。他們就把他帶到亞略‧巴古,說:「你所講的這新道,我們也可以知道嗎?因為你有些奇怪的事傳到我們耳中,我們願意知道這些事是甚麼意思。」(雅典人和住在那裏的客人都不顧別的事,只將新聞說說聽聽。)
保羅站在亞略‧巴古當中,說:「眾位雅典人哪,我看你們凡事很敬畏鬼神。我遊行的時候,觀看你們所敬拜的,遇見一座壇,上面寫着『未識之神』。你們所不認識而敬拜的,我現在告訴你們。創造宇宙和其中萬物的神,既是天地的主,就不住人手所造的殿,也不用人手服事,好像缺少甚麼;自己倒將生命、氣息、萬物,賜給萬人。他從一本本:有古卷是血脈造出萬族的人,住在全地上,並且預先定準他們的年限和所住的疆界,要叫他們尋求神,或者可以揣摩而得,其實他離我們各人不遠;我們生活、動作、存留,都在乎他。就如你們作詩的,有人說:『我們也是他所生的。』我們既是神所生的,就不當以為神的神性像人用手藝、心思所雕刻的金、銀、石。世人蒙昧無知的時候,神並不監察,如今卻吩咐各處的人都要悔改。因為他已經定了日子,要藉着他所設立的人按公義審判天下,並且叫他從死裏復活,給萬人作可信的憑據。」
眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」於是保羅從他們當中出去了。 但有幾個人貼近他,信了主,其中有亞略‧巴古的官丟尼修,並一個婦人,名叫大馬哩,還有別人一同信從。

對基督徒來說,保羅這篇講道講的真好,不但講出了上帝的超越性(像是不住人手所造的殿、也不是金銀石的彫刻),也帶出了耶穌基督復活的大能。但最近我才注意到眾人的反應:「眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」」不曉得你看到這一段有什麼感想?可能我是玻璃心吧,如果我是保羅,我大概會非常非常的難過,看起來似乎沒有人理會這個福音、這篇講道。這篇被基督…

NAT64 (WrapSix) Tutorial

最近請人協助架設環境,但似乎進度不如預期。所以一怒之下(開玩笑的,我這人一向與人為善,您說是吧 ... ),就自己來架設NAT64的實驗環境,而這篇教學就是自己架設的過程紀錄。所以本篇文章告訴我們,少發脾氣比較好 ... (畫錯重點了吧

在紀錄相關實驗步驟的時候,先來說明一下什麼是NAT64。Wikipedia上的描述是:「NAT64 is a mechanism to allow IPv6 hosts to communicate with IPv4 servers.」簡單來說,就是讓IPv6的設備能夠連上傳統IPv4網路設備的機制。怎麼做呢?看到NAT這幾個字眼應該用猜的也猜的到,就是把封包的IPv6 Header替換成某個預先設定的IPv4 Header就完成了。這裡要特別強調的一點,這個技術是讓IPv6的設備能夠連上IPv4的設備,並不是讓IPv4的設備能夠連上IPv6的設備!理由呢?下面這個解釋是從TAYGA的網站上抄下來的:

It is technically impossible for a translation system operating purely at the IP layer to allow IPv4 hosts to establish connections to any arbitrary IPv6 server. Such a system would need to represent every IPv6 server on the Internet with a unique IPv4 address, which is clearly infeasible given the size of the IPv6 address space.

當然我個人有另外非技術的解釋,NAT64是為了讓過去已經存在的IPv4 Server可以繼續提供服務,而如果連Server都已經是IPv6了,現在的client大部份都有IPv6的介面了啊,直接用IPv6來溝通不就好了。

這邊的紀錄著重在於架設環境以及實驗,相關工具的程式碼解析不在範圍內(因為我沒有這麼多時間)。

1. 實驗環境

實驗環境的圖如下:


在這邊解釋一下NAT64的設定。IPv4和IPv6是指NAT64自己的IP位置設定,IPv6 Prefix指的是在網路中所有使用IPv4位置轉換成IPv6位置所使用的前置修飾,而Masquerade IPv4是說所有要連到IPv4設備的IPv6位置會被轉換成為這個Masquerade IPv4位置。如果還有不清楚的地方,之後的範例就可以很容易的看出來。這邊要特別紀錄一件事,那就是為什麼NAT64需要IPv4和IPv6的位置?明明整個實驗上看起來這兩個位置的設定更本毫無意義啊!這個問題其實困擾了我一段時間,直到看到了下面這段話:

It's used in ICMP error messages.

恩,那大概了解它要幹什麼了(所以還是要認真的看文件啊),簡單來說,我猜是要讓 kernel 來負責回答 ICMP Unreachable 的信息,所以才要在機器上來設定這兩個IP位置。

2. NAT64 架設

現在來看如何架設NAT64,在這裡我們所選用的是 WrapSix。理由呢?技術的理由不少,但真實的理由是學弟的推薦。

首先先從官網下載並解壓縮。然後要修改程式。修改程式?What?很簡單,因為這套軟體為了優化的緣故(或是說懶得寫設定檔),所有的設定直接寫在程式碼裡(簡單來說就是我常常警告同事的,非必要不準給我Hard Code在程式碼裏面)。要修改的地方有兩個,wrapper.c 和 wrapper.h,可以修改的內容如下:

  • INTERFACE    Interface on which WrapSix should operate, e.g. eth0.
  • PREFIX        NAT64 prefix; at least /96, the default is standard 64:ff9b::/96. Input it without the information about prefix length, i.e. just 64:ff9b::.
  • IPV4_ADDR    IPv4 address which is dedicated for WrapSix and is not assigned  to the host operating system.
  • HOST_IPV6_ADDR    IPv6 address which represents the host, i.e. which is assigned  to the operating system. It's used in ICMP error messages.
  • HOST_IPV4_ADDR    IPv4 address which represents the host, i.e. which is assigned  to the operating system. It's used in ICMP error messages.
  • MTU        Minimum MTU in your IPv6 network; default is 1280, but you can  set it to a greater value (up to 1500).
  • PACKET_BUFFER    Size of a buffer for incoming packets; it's strongly recommended to leave its value as is (i.e. 1514).
按照上面的設定,我所修改的部份如下:

/* +++ CONFIGURATION +++ */
#define INTERFACE "eth0"
#define PREFIX  "64:ff9b::"
#define IPV4_ADDR "192.168.8.167"
#define HOST_IPV6_ADDR "fd77::1:0:1"
#define HOST_IPV4_ADDR "192.168.8.64"
/* --- CONFIGURATION --- */


然後 ./configure 以及 make。我的個性是實驗的東西絕不 install 到系統上,所以我才不會下 make install呢!接下來是設定的部份。首先我們要把IPv4和IPv6的位置設定到機器上。本來我以為這個動作程式會幫我處理,但看了老半天,程式似乎沒有這功能,那就自己來吧。然後在動手之前請注意,現在大多數的 Linux Distribution 都有安裝 Network Manager 這個套件來管理網路設定,本來用這工具來設定也不是不行,但不如用指令來的直接(正確來說是,我懶的截圖...),所以我們要先把Network Manager停用,最容易的方式是透過Network Manager把eth0 off 掉就行了,還要把「當這個網路可用時自動連線」給取消掉。接下來就是設定IP位置:

$ sudo ifconfig 192.168.8.64
$ sudo ifconfig eth0 inet6 add fd77::1:0:1/96
$ sudo ./wrapsix

執行 wrapsix 後大功告成。

3. 設定 IPv6 Host 

在 IPv6 Host 上面只要設定 route就好了。

$
$ sudo route -A inet6 add 64:ff9b::/96 dev eth0

4. 設定 IPv4 Host

沒啥好設定的。

5. 測試

測試很簡單。只要用 IPv6 的 Host ping IPv4 的 Host 就完成了。要記得,雖然說是 ping IPv4 的 Host,這時候要 ping 的 IP 是 64:ff9b::c0a8:08a4 而不是 192.168.8.164 喔。綠色的部份為前置字串紅色的部份是192.168.8.164

$ ping6 64:ff9b::c0a8:08a4
PING 64:ff9b::c0a8:08a4(64:ff9b::c0a8:8a4) 56 data bytes
64 bytes from 64:ff9b::c0a8:8a4: icmp_seq=1 ttl=63 time=19.3 ms
64 bytes from 64:ff9b::c0a8:8a4: icmp_seq=2 ttl=63 time=0.599 ms
64 bytes from 64:ff9b::c0a8:8a4: icmp_seq=3 ttl=63 time=1.86 ms
^C
--- 64:ff9b::c0a8:08a4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.599/7.279/19.370/8.565 ms

接下來是 NAT64 上面 wireshark 的截圖:



最後一個問題 ... 我做這件事要幹嘛呢?哈哈哈 ...

留言

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

我弟家的新居感恩禮拜分享:善頌善禱

如何利用 Wireshark 來監聽 IEEE 802.11 的管理封包