私の目標は: システムには 2 つのネットワークインターフェイスがあり、両方ともeth0
インターネットtap0
に接続されています。サービス/プログラムをオプションでバインドできる必要があります。
Apacheの例:次のような仮想ホストを作成したいと思います。
site1.example.com
85.xxx.49.100
以下で使用できるようにバインドeth0
site2.example.com
89.xxx.xxx.5
以下で使用できるようにバインドtap0
site3.example.com
89.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
。
eth0
DHCPdサーバーから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
使用することはできません。タイムアウトします。wget
89.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つのインターネットアドレスのそれぞれにバインドします。
編集する
他の回答で詳しく説明されているように、すでに機能しているソリューションがありますが、参考のためにのみ使用してください。
- OpenVPNのパスルーティングサブネット
- 錫橋初期要件を満たしてすぐに利用可能