(移行元:https://serverfault.com/questions/895250/setting-up-ubuntu-linux-16-04-as-a-router-within-a-vm)
Ubuntu VMをルーターとしてセットアップして、アットCDさまざまなネットワーク条件下で単一のデバイスを対象にしたテストを実行できます。一部は動作していますが、ゲートウェイでパケットをルーティングする方法がわかりません。
私が試したことの要点:
"router"
Ubuntu 16.04 ホスト ("laptop"
)上にUbuntu 16.04 VM ( ) を作成します。- VM用に2つのNICを作成し、両方をホストの単一のWiFiアダプタにブリッジしました。
- 最初のNIC(
enp0s3
)をゲートウェイとして静的に構成し、192.168.0.199に設定します。 - 2番目の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
この時点で、 Wifi ルーターをゲートウェイ (192.168.0.1) として引き続き使用するように構成されている LAN 上の他のマシンから、192.168.0.199 と 192.168.0.100 の両方を介して実行されている HTTP サーバーにアクセスできます。
test-device
インターネット上のホストに ping することはできますが、それらのホストへの 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転送を有効にしていないsysctl 内...
にIPルーティングを実行するUbuntu Linuxの場合:
sudo nano sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
sudo sysctl -p