(遷移自https://serverfault.com/questions/895250/setting-up-ubuntu-linux-16-04-as-a-router-within-a-vm)
我想將 Ubuntu VM 設定為運行的路由器亞克德這樣我就可以在各種網路條件下對單一設備進行有針對性的測試。我已經讓部件正常工作,但仍堅持讓網關路由我的資料包。
我嘗試過的要點:
"router"
在 Ubuntu 16.04 主機( ) 上建立 Ubuntu 16.04 VM ("laptop"
)- 為虛擬機器建立兩張網路卡,均橋接到主機的單一 WiFi 轉接器
- 將第一個 NIC (
enp0s3
) 靜態配置為網關,位址為 192.168.0.199 - 將第二個 NIC (
enp0s8
) 設定為透過 DHCP 自動配置,例如 192.168.0.100 - 使用以下
iptables
規則(來自這裡和這裡) 在router
:iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE iptables -A FORWARD -i enp0s8 -o enp0s3 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT
- 被測設備/主機 (
"test-device"
) 配置為靜態 IP 192.168.0.77,配置為使用 192.168.0.199 作為閘道。
此時,我可以router
從 LAN 上設定為仍使用 Wifi 路由器作為網關 (192.168.0.1) 的其他電腦透過 192.168.0.199 和 192.168.0.100 存取運行在 192.168.0.199 伺服器上的 HTTP 伺服器。
test-device
能夠 ping 通 Internet 上的主機,但是無法與它們建立 TCP 連線(例如curl www.google.com
失敗並顯示「目標無法存取」)。
其他一些值得分享的事情:
iptables
配置router
:
root# iptables -L -v
Chain INPUT (policy ACCEPT 12012 packets, 5058K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- enp0s8 enp0s3 anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT all -- enp0s3 enp0s8 anywhere anywhere
Chain OUTPUT (policy ACCEPT 3220 packets, 271K bytes)
pkts bytes target prot opt in out source destination
ip route
條目
root# ip route
default via 192.168.0.1 dev enp0s3 onlink
169.254.0.0/16 dev enp0s3 scope link metric 1000
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.199
192.168.0.0/24 dev enp0s8 proto kernel scope link src 192.168.0.121
我不知道下一步該做什麼,需要一些幫助!
答案1
你沒有開啟IP轉送在系統控制...
到執行IP路由在 Ubuntu Linux 中:
sudo nano sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
sudo sysctl -p