Linux 14.04 VMを作成できるopenstackアカウントにアクセスできます。 2つのネットワークインターフェイスを作成しました。
ルーターを介してインターネットに接続されている「public-net」
インターネットに公開されていない「プライベートネット」
これで、両方のネットワークインターフェイスに接続され、eth0(10.70.0.6)とeth1(10.90.0.1)に2つのインターネットアドレスを持つ「GATEWAY」という名前のVMを1つ作成しました。 eth0はインターネットに公開され、eth1はプライベートネットワーク用です。ゲートウェイVMには、eth0にパブリックIPアドレスがあります。
これで、プライベートネットインターフェイス上に「エージェント」という名前のVMをもう1つ作成しました。 IPアドレスは10.90.0.7で、デフォルトゲートウェイを10.90.0.1(GATEWAY vmマシン)にします
プライベートVMはルーターに公開されていないため、VMにインターネットアクセスできません。インターネットアクセスを有効にするために、NATルールを追加しました以下のようなゲートウェイvm:
Sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
これにより、ホストゲートウェイをゲートウェイマシンのアドレスとして送信するすべてのインターネットパケットのソースアドレスが変更されます。また、GATEWAYマシンでipv4 packet forwarding = 1を設定します。
GATEWAYマシンからは外部アドレスにpingできますが、内部エージェントマシンからはできません。言うまでもなく、このプライベートエージェントマシンもインターネットにアクセスできません。
誰かがゲートウェイをセットアップするのを手伝ってくれますかVMこのようにして、ルーターとして使用し、プライベートマシンにインターネットアクセスを提供することができます。
これは私のエージェントのルーティングテーブルがどのように見えるかです:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.90.0.1 0.0.0.0 UG 0 0 0 eth0
10.90.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.169.254 10.90.0.2 255.255.255.255 UGH 0 0 0 eth0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
ここでは、両方のインターフェイスでicmp pingのtcpdumpを追加しています。
eth1:プライベートネットワークに接続するインターフェイス。
18:43:39.309771 IP Host-10-90-0-7.openstacklocal > 172.217.3.14: ICMP echo request, id 2395, seq 1, length 64
18:43:39.355430 IP 172.217.3.14 > Host-10-90-0-7.openstacklocal: ICMP echo reply, id 2395, seq 1, length 64
18:43:40.318637 IP Host-10-90-0-7.openstacklocal > 172.217.3.14: ICMP echo request, id 2395, seq 2, length 64
18:43:40.364178 IP 172.217.3.14 > Host-10-90-0-7.openstacklocal: ICMP echo reply, id 2395, seq 2, length 64
eth0:インターネットに接続するインターフェース。
18:43:39.309796 IP Host-10-70-0-6.openstacklocal > 172.217.3.14: ICMP echo request, id 2395, seq 1, length 64
18:43:39.355396 IP 172.217.3.14 > Host-10-70-0-6.openstacklocal: ICMP echo reply, id 2395, seq 1, length 64
18:43:40.318679 IP Host-10-70-0-6.openstacklocal > 172.217.3.14: ICMP echo request, id 2395, seq 2, length 64
18:43:40.364154 IP 172.217.3.14 > Host-10-70-0-6.openstacklocal: ICMP echo reply, id 2395, seq 2, length 64
18:43:41.326618 IP Host-10-70-0-6.openstacklocal > 172.217.3.14: ICMP echo request, id 2395, seq 3, length 64
ここでは、ping応答が外部アドレスから送信され、その両方のインターフェイスを経由していることがわかります。 eth1がプライベートVMに受信しているにもかかわらず、そのpingは100%パケットを失いました。
--------- ------------------- ------------- ------------
INTERNET |----| openstack-router| --10.70.0.1 --------10.70.0.6(NIC eth0) --| GATEWAY-VM |-- 10.90.0.1(NIC eth1) ---------10.90.0.7(NIC eth0) --| AGENT-VM |
--------- ------------------- ------------- ------------
ファイアウォールルールは順調に進んでいます。私は「昔ながらの」方法で物事を行います-スクリプトを書き、それを/ etcに入れて/etc/rc.localから呼び出します。あなたがそれをしたいが、ここに私のために働くものがあります。
OSはnetinstallを介したDebian Jessie 64ビットであり、「標準システムユーティリティ」のみがtasksel時に選択され、MintデスクトップのVirtualBoxで実行されます。 eth0は、ブリッジインターフェイスとDHCPを介して私のLANに接続しています。 eth1は、VM実験に使用するマシンのネットワークのLAN側です。ファイアウォールスクリプトを/etc/rc.firewallにコピーして貼り付け、実行可能にして、/ etcで呼び出します。 /rc.local。
#!/bin/bash
# copyright me, licensed to you freely
# a very simple set of iptables commands
# to allow forwarding between ethernet
# devices
# make sure forwarding is enabled in the kernel
echo 1 > /proc/sys/net/ipv4/ip_forward
# where is iptables located?
iptables=`which iptables`
# flush all existing rules
$iptables -F
# this is for NAT
# enable masquerading
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# don't forward packets from off-lan to lan if
# they are a brand new connection being initiated
$iptables -A FORWARD -i eth0 -o eth1 -m state --state NEW -j REJECT
# if the packets come from off-lan but they are
# related to a connection that was established from
# within the lan, go ahead and forward them
$iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# whatever traffic comes from the lan to go to
# the world allow thru
$iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
すべてが完了して実行されると、次のようなものが表示されるはずです。
root@router:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:e6:43:df
inet addr:192.168.1.126 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fee6:43df/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:729 errors:0 dropped:0 overruns:0 frame:0
TX packets:382 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:61777 (60.3 KiB) TX bytes:46468 (45.3 KiB)
root@router:~# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 08:00:27:af:50:e2
inet addr:10.99.99.1 Bcast:10.99.99.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feaf:50e2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:828 (828.0 B)
root@router:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
10.99.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
root@router:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere state NEW reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@router:~# cat /proc/sys/net/ipv4/ip_forward
1
root@router:~#