將 Ubuntu Linux 16.04 設定為虛擬機器內的路由器

將 Ubuntu Linux 16.04 設定為虛擬機器內的路由器

(遷移自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

相關內容