這個…是一件相當麻煩的事吶...
而且就以測試來說,也著實麻煩
目標:讓你的外界 ip (xx.xx.xxx.xx) 某特定 port (此例為tcp 3661)可以正常連線到你 Ubuntu 下的 guest OS 內
條件(網路線路配置):
第零步-確認主機的網路配置
在你連線的情況下,對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
- 其中 litebox 是因應你要設定的 guest OS 在 VBox 下名稱而異
- share 則是規則名稱,故只需三個都一樣就可以
- 第一條的 0 表示為 TCP ; 1 為 UDP (應該)
- 二三條的 3661 3661 為埠號,設定為對外從 3661 轉到 guest OS 3661
之後開始確認連線是否正常,可以在 guest OS 設立 port 為
3661 的 ftp server 然後在 terminal 輸入以下指令
確認能連線出現登入詢問即成功(前提是請先自行確認在 guest OS 下能自連)
第二步-測試對外/設定 iptables
之後我們就可以再試試我們的 public ip (對外 ip) 要否能被外界偵測到,使用以下指令:
一樣若能連線即成功了。
如果到此失敗的話就需要多
額外一步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 了(>ω<)♪♪