2007年9月4日 星期二

VirtualBox NAT port forwarding

這個…是一件相當麻煩的事吶...
而且就以測試來說,也著實麻煩

目標:讓你的外界 ip (xx.xx.xxx.xx) 某特定 port (此例為tcp 3661)可以正常連線到你 Ubuntu 下的 guest OS 內
條件(網路線路配置):

外界→(頻寬分享器,對外 ip xx.xx.xxx.xx,對內發放 192.168.1.x ) → (我的機器 Ubuntu ,內網 eth0 ip 192.168.1.120) → (VirtualBox guest OS WinXp,VM 名稱 litebox,使用 VB 設定網路配接卡#0:NAT )
然後,我們開始吧


第零步-確認主機的網路配置
在你連線的情況下,對Ubuntu 右上系統圖示的網路連線右鍵→「連線資訊」可以查得連線介面(通常都是 eth0) 和 ip (本例即 192.168.1.120 )

第一步-建立並確認主機到虛擬機的連線:
請在 terminal (終端機) 下輸入:
  • VBoxManage setextradata litebox "VBoxInternal/Devices/pcnet/0/LUN#0/Config/share/UDP" 0
  • VBoxManage setextradata litebox "VBoxInternal/Devices/pcnet/0/LUN#0/Config/share/GuestPort" 3661
  • VBoxManage setextradata litebox "VBoxInternal/Devices/pcnet/0/LUN#0/Config/share/HostPort" 3661
  1. 其中 litebox 是因應你要設定的 guest OS 在 VBox 下名稱而異
  2. share 則是規則名稱,故只需三個都一樣就可以
  3. 第一條的 0 表示為 TCP ; 1 為 UDP (應該)
  4. 二三條的 3661 3661 為埠號,設定為對外從 3661 轉到 guest OS 3661
之後開始確認連線是否正常,可以在 guest OS 設立 port 為 3661 的 ftp server 然後在 terminal 輸入以下指令
  • ftp 192.168.1.120 3661
確認能連線出現登入詢問即成功(前提是請先自行確認在 guest OS 下能自連)

第二步-測試對外/設定 iptables
之後我們就可以再試試我們的 public ip (對外 ip) 要否能被外界偵測到,使用以下指令:
  • ftp xx.xx.xxx.xx 3661
一樣若能連線即成功了。

如果到此失敗的話就需要多額外一步
VBox 的 port 轉接會監聽目標為 192.168.1.120 的封包,但有時頻寬分享器會直接轉送封包,封包上注記的目標就會是 xx.xx.xxx.xx 而不是 ,進而不會被 Vbox 轉送,此時就需要用 iptables 重新包裝封包使得 VBox 可以偵測到並順利轉送,使用下列指令達成目標:
第一,先打開 iptables 的封包轉送功能
  • sudo echo 1 > /proc/sys/net/ipv4/ip_forward
其後輸入以下
  • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3661 -d xx.xx.xxx.xx -j DNAT --to-destination 192.168.1.120:3661
這句話是說「要求 iptables 在 nat 的表格中加入一條規則,其描述為"由外方進入的封包當中由 eth0 所接收,透過 tcp 3661送至目標為 xx.xx.xxx.xx 者,其判定為更改封包目標 192.168.1.120 port 3661 ,同前者一樣是 tcp"」

這樣,應該就是全部了,本人自己也終於可以用 VirtualBox 來跑日本 p2p 了(>ω<)♪♪

2 則留言:

  1. 網誌管理員已經移除這則留言。

    回覆刪除
  2. 網誌管理員已經移除這則留言。

    回覆刪除