Debian: インターフェイス 2 個、ゲートウェイ 2 個

Debian: インターフェイス 2 個、ゲートウェイ 2 個

私の目標は: システムには 2 つのネットワークインターフェイスがあり、両方ともeth0インターネットtap0に接続されています。サービス/プログラムをオプションでバインドできる必要があります。

Apacheの例:次のような仮想ホストを作成したいと思います。

  • site1.example.com85.xxx.49.100以下で使用できるようにバインドeth0
  • site2.example.com89.xxx.xxx.5以下で使用できるようにバインドtap0
  • site3.example.com89.xxx.xxx.4以下で使用できるようにバインドtap0

eth0デフォルトでは、システムのプログラムは次の方法を使用して外部世界と通信します。しかし、また、必要に応じてIPにバインドして、着信および発信tap0トラフィックに使用できます。はいspeedtest-cli --source="85.xxx.49.100":(IP at eth0)とspeedtest-cli --source="89.xxx.xxx.4"(IP at)を実行できるはずですtap0


eth0DHCPdサーバーからIP、ゲートウェイ、およびDNSサーバーを取得する物理イーサネットインターフェースを備えたDebianシステムがあります。それは/etc/network/interfaces次のとおりです。

allow-hotplug eth0
no-auto-down eth0
iface eth0 inet dhcp

ネットワークがオンラインになると、ルーティングテーブルは次のようになります。

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         85.xxx.xxx.1    0.0.0.0         UG    0      0        0 eth0
85.xxx.49.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 eth0

これで、tapこのコンピュータにデバイスを追加しました(OpenVPNを使用して)。これOpenVPNクライアントそしてサーバーはIPアドレスを割り当てません。アイデアは、マシンの間にレイヤー2だけを置くことです。 OpenVPN サーバーの構成は次のとおりです。

local 89.xxx.xxx.8
port xxxx
proto udp
dev tap0
mode server
tls-server
user nobody
group nogroup
tls-version-min 1.2
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
script-security 1
client-to-client
keepalive 10 60
compress
max-clients 10
cipher AES-256-CBC
persist-key
persist-tun

サーバーのネットワーク構成は次のとおりです。

10-静的-eth0.network

[Match]
Name=eth0

[Network]
Bridge=br0

25-br0.netdev

[NetDev]
Name=br0
Kind=bridge

25-br0.network

[Match]
Name=br0

[Network]
DHCP=no
Address=89.xxx.xxx.8/24
Address=89.xxx.xxx.7/24
Address=89.xxx.xxx.6/24
Gateway=89.xxx.xxx.1

DNS=1.1.1.1
DNS=8.8.8.8

30タブネットワーク

[Match]
Name=tap0

[Network]
Bridge=br0

OpenVPNが起動すると、クライアントデバイスに入ってくるすべてのイーサネットフレームがtap0サーバーから送信されます。br0理論的には意味は私はできます。サーバー用に予約されたIPアドレスをtap0クライアントのデバイスに割り当てる。クライアントデバイスにIPを追加してみましたtap

ip addr add 89.xxx.xxx.5/24 broadcast 89.xxx.xxx.255 dev tap0
ip link set tap0 up
route add default gw 89.xxx.xxx.1 metric 200
ip route add 89.xxx.xxx.8 via 85.xxx.xxx.1 dev eth0

IPがあり、次を使用してGoogleにpingを送信できますが、ping -I eth0 google.comたとえばソースセットをping -I tap0 google.com使用することはできません。タイムアウトします。wget89.xxx.xxx.5

どうすればいいですか?ありがとうございます。

ベストアンサー1

この質問には、現実と一致しないネットワークの仕組みに関するさまざまな仮定があります。

リモートサーバーのネットワークに接続されているタブデバイスをこのコンピュータに追加しました。

「タブデバイスをリモートサーバーのネットワークに接続する」ことはできません。タップデバイスは、アプリケーションがネットワークインタフェースを制御する方法です。 Tapデバイスに接続されたアプリケーションがない場合、Tapデバイスは何もしません。

私が理解しているように、Debianシステムのデバイスに入ってくるすべてのイーサネットフレームはサーバーブリッジを介してtap送信する必要があります。br0

いいえ。

あなたができることは、ある種のトンネル(OpenVPN、Tinc、wiredeguard;さまざまなオプションがあります)を使用することです。このトンネルは、Debianコンピュータ(タブなど)にネットワークインターフェイスを作成し、サーバーにネットワークインターフェイスを作成します。サーバー上、このデバイスを発信するネットワークインターフェイスに接続できます。Debian マシンで、外部ネットワークを想定して、このデバイスに2つのIPアドレス(89.xxx.xxx.5および)を提供できます。89.xxx.xxx.6サーバー上これらも割り当てることができます。

2つのデフォルトパスを使用しないでください。単一のデフォルトパスを使用し、ApacheをDebianシステムの3つのインターネットアドレスのそれぞれにバインドします。

編集する

他の回答で詳しく説明されているように、すでに機能しているソリューションがありますが、参考のためにのみ使用してください。

おすすめ記事