web-dev-qa-db-ja.com

マシン2にある仮想マシンへのssh-DNAT後のmachine1のログの火星のソース(マシン1とマシン2のカバーが接続されています)

私のシナリオ

enter image description here

  • 2台の物理マシン。それぞれに2つのネットワークインターフェイス(eth0、eth1)があります。
  • それらは仮想マシンホストとして機能します
  • 1台のマシンだけで、ネットワークは問題なく機能します
  • 最初に私は2つの別々のネットワークを持っていて、各マシンには独自の仮想dhcpサーバーが実行されています
  • 次に、分離されたネットワークを1つにマージしようとしました
  • ファイアウォール:shorewall(lanの接続ポリシー=両方のマシンで許可)
  • dhcpサーバー:dnsmasq
  • 両方のマシンがインターネットに接続できます

クロスオーバーケーブルを介して2台のマシンを接続し、1つのネットワークを共有したいので、1つのネットワークを持つ1つのdhcpサーバーしかなく、このLAN内の各サーバーは相互に接続できます。これは理にかなっていますか、それとも2つの別々のdhcpサーバーとネットワークがより良い方法ですか?

問題

以下にいくつかの設定を追加し、いくつかの接続テストを行いました。

要するに

  • machine1 + machine2はmachine1のipsに到達できます
  • machine1 + machine2はmachine2のipsに到達できません
  • machine1 + machine2はmachine2のipsに到達できます
  • 外部dnat(たとえば、ssh)はmachine1(ポート5678-> 10.62.63.20:22)で機能します
  • 外部dnat(たとえば、ssh)はmachine2では機能しません(ポート5678-> 10.62.63.30:22)

machine1ポート5678にssh接続すると、10.62.62.20への接続が機能し、machine1でこの接続からの海岸壁のログエントリのみが表示されます。しかし、machine2ポート5678に接続すると、接続が機能せず、machine1で火星のログを確認できます。

Nov 29 15:26:57 machine1 kernel: [ 7495.749894] martian source **ssh.client.ip.addr** from **yyy.yyy.yyy.yyy**, on dev br1

機械の概要

machine1仮想マシン:

  • dhcp 10.62.63.2
  • web1 10.62.63.20

machine2仮想マシン:

  • web2 10.62.63.30

設定ファイル

machine1/etc/shorewall/rules

***snip***
DNAT:debug  net  lan:10.62.63.20:22  tcp  5678  -  xxx.xxx.xxx.xxx
***snip***

machine2/etc/shorewall/rules

***snip***
DNAT:debug  net  lan:10.62.63.30:22  tcp  5678  -  yyy.yyy.yyy.yyy
***snip***

machine1/etc/network/interfaces

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
#allow-hotplug eth0 
auto eth0
iface eth0 inet manual


# device: eth1
#allow-hotplug eth1
auto eth1
iface eth1 inet manual 

auto br0
iface br0 inet static
  address   xxx.xxx.xxx.xxx
  broadcast xxx.xxx.xxx.xxx
  netmask   xxx.xxx.xxx.xxx
  gateway   xxx.xxx.xxx.xxx
  bridge_ports eth0
  bridge_fd 0
  bridge_hello 2
  bridge_maxage 12
  bridge_maxwait 0
  bridge_stp off


auto br1
iface br1 inet static
  address 10.62.63.1
  broadcast 10.62.63.255
  netmask 255.255.255.0
  bridge_ports eth1
  bridge_fd 0
  bridge_hello 2
  bridge_maxage 12
  bridge_maxwait 0
  bridge_stp off

machine2/etc/network/interfaces

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
#allow-hotplug eth0 
auto eth0
iface eth0 inet manual


# device: eth1
#allow-hotplug eth1
auto eth1
iface eth1 inet manual 

auto br0
iface br0 inet static
  address   yyy.yyy.yyy.yyy
  broadcast yyy.yyy.yyy.yyy
  netmask   yyy.yyy.yyy.yyy
  gateway   yyy.yyy.yyy.yyy
  bridge_ports eth0
  bridge_fd 0
  bridge_hello 2
  bridge_maxage 12
  bridge_maxwait 0
  bridge_stp off


auto br1
iface br1 inet static
  address 10.62.63.3
  broadcast 10.62.63.255
  netmask 255.255.255.0
  bridge_ports eth1
  bridge_fd 0
  bridge_hello 2
  bridge_maxage 12
  bridge_maxwait 0
  bridge_stp off

テスト

machine1(10.62.63.1)

ルート:

ip route show
yyy.yyy.yyy.yyy/yy dev br0  proto kernel  scope link  src yyy.yyy.yyy.yyy
10.62.63.0/24 dev br1  proto kernel  scope link  src 10.62.63.1
default via yyy.yyy.yyy.yyy dev br0
  • ping 10.62.63.3 to br1 ip(remote):ok
  • ping 10.62.63.1 to br1 ip(local):ok
  • ping 10.62.63.2 to dns(local):ok
  • ping 10.62.63.20 to web01(ローカル):わかりました
  • ping 10.62.63.30 to web02(リモート):わかりました
  • ssh 10.62.63.20 to web01(ローカル):わかりました
  • ssh 10.62.63.30 to web02(リモート):わかりました

machine2(10.62.63.3)

ルート:

ip route show
yyy.yyy.yyy.yyy/yy dev br0  proto kernel  scope link  src yyy.yyy.yyy.yyy
10.62.63.0/24 dev br1  proto kernel  scope link  src 10.62.63.3
default via yyy.yyy.yyy.yyy dev br0
  • ping 10.62.63.3 to br1 ip(local):ok
  • ping 10.62.63.1 to br1 ip(remote):ok
  • ping 10.62.63.2 to dns(remote):ok
  • ping 10.62.63.20 to web01(リモート):わかりました
  • ping 10.62.63.30 to web02(ローカル):わかりました
  • ssh 10.62.63.20 to web01(リモート):わかりました
  • ssh 10.62.63.30 to web02(ローカル):わかりました
1
c33s

問題は、インバウンドではなく、アウトバウンドパケットでした。

dhcpサーバーは両方のマシンに同じゲートウェイ(10.62.63.1)を提供したため、machine2のdnatインバウンドパケットはそれらの場所(machine2のweb)に到達するのに問題はありませんでしたが、返されるパケットはmachine1のゲートウェイ(10.62。 63.1)そしてそれが来ていた場所からではありません(10.62.63.3)。

したがって、マーションパケットとしてmachine1に到達します。

解決策は、DNS(dnsmasq)にタグを追加して、異なるホスト上の仮想マシンが異なるゲートウェイを取得するようにすることでした。

/etc/dnsmasq.conf

*** snip ***

dhcp-Host=set:machine1,ff:ff:ff:ff:ff:ff,web01,10.62.63.20
dhcp-Host=set:machine2,ee:ee:ee:ee:ee:ee,web02,10.62.63.30

dhcp-option=tag:machine1,option:router,10.62.63.1
dhcp-option=tag:machine2,option:router,10.62.63.3

*** snip ***
1
c33s