wlan0とeth0を介して同じWAN IPの2つの異なるワイヤガードトンネルwg0とwg1

wlan0とeth0を介して同じWAN IPの2つの異なるワイヤガードトンネルwg0とwg1

私は次の構成を持っています:

両方のインターフェイスはeth0ISP1を介して接続され、wlan0ISP2を介してインターネットに接続されます。両方の接続は異なるIPアドレスを持ち、インターネット接続を許可します。

私は2つのwireguardインターフェイスを設定wg0しましたwg1wg0eth0wg1wlan0

私が経験している問題は、同じリモートサーバーピア(たとえば、ピアwan ip)を使用して両方の11.11.11.11サーバーに同時に接続していることです。したがって、パケットが到着すると、通過するのではなく通過しようとすることができます。固定ルーティングルールを追加しようとしましたが、問題は、接続がそのルートを介して送信される必要があるため、常にルートを通過する必要がないことです。 。wg0wg1wg1eth0wlan011.11.11.11wlan0eth0eth0

話す方法はありますか?接続はwg1常に経由で通信する必要がありますかwlan0

ここで考えられる他の解決策(動作しているかどうかわからない)はeth0リンク集約を確立するwlan0ことですが、他の物理接続を集計することは不可能であることを読んでいます。wg0どのインターフェイスが実行されているeth0かにかかわらず、インターフェイスを使用できる場合はwlan0最善です。

現在の構成は次のとおりです。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 02:81:1e:50:c6:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.200/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 0e:41:58:01:16:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.134/24 brd 192.168.0.255 scope global wlan0
       valid_lft forever preferred_lft forever
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.9.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever
5: wg1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.9.1.1/24 scope global wg0-client
       valid_lft forever preferred_lft forever

修正する

コメントにリストされているコマンドの出力を追加します。

ip route

default via 192.168.100.1 dev eth0 onlink
10.9.0.0/24 dev wg0 proto kernel scope link src 10.9.0.1
10.9.1.0/24 dev wg1 proto kernel scope link src 10.9.1.1
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.134
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.200

ip rule

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

ip route show table local

local 10.9.0.1 dev wg0 proto kernel scope host src 10.9.0.1
broadcast 10.9.0.255 dev wg0 proto kernel scope link src 10.9.0.1
local 10.9.1.1 dev wg1 proto kernel scope host src 10.9.1.1
broadcast 10.9.1.255 dev wg1 proto kernel scope link src 10.9.1.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 192.168.0.134 dev wlan0 proto kernel scope host src 192.168.0.134
broadcast 192.168.0.255 dev wlan0 proto kernel scope link src 192.168.0.134
local 192.168.100.200 dev eth0 proto kernel scope host src 192.168.100.200
broadcast 192.168.100.255 dev eth0 proto kernel scope link src 192.168.100.200

ip route show table main

default via 192.168.100.1 dev eth0 onlink
10.9.0.0/24 dev wg0 proto kernel scope link src 10.9.0.1
10.9.1.0/24 dev wg1 proto kernel scope link src 10.9.1.1
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.134
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.200

とワイヤガード構成:

wg0.conf

[Interface]
Address = 10.9.0.1/24
PrivateKey = xxx
ListenPort = 51820

PostUp = sysctl net.ipv4.conf.%i.forwarding=1 net.ipv4.conf.$(ip r l 0/0 | mawk '{print $5;exit}').forwarding=1
PostUp = sysctl net.ipv6.conf.$(ip r l 0/0 | mawk '{print $5;exit}').accept_ra=2
PostUp = sysctl net.ipv6.conf.%i.forwarding=1 net.ipv6.conf.$(ip r l 0/0 | mawk '{print $5;exit}').forwarding=1
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o $(ip r l 0/0 | mawk '{print $5;exit}') -j MASQUERADE
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o $(ip r l 0/0 | mawk '{print $5;exit}') -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.9.0.0/24 -o $(ip r l 0/0 | mawk '{print $5;exit}') -j MASQUERADE
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o $(ip r l 0/0 | mawk '{print $5;exit}') -j MASQUERADE

# Client 1
[Peer]
PublicKey = yyy
AllowedIPs = 10.9.0.2/32

wg1.conf

[Interface]
Address = 10.9.1.1/24
PrivateKey = zzz

PostUp = sysctl net.ipv4.conf.wg1.forwarding=1 net.ipv4.conf.wlan0.forwarding=1
PostUp = sysctl net.ipv6.conf.wlan0.accept_ra=2
PostUp = sysctl net.ipv6.conf.wg1.forwarding=1 net.ipv6.conf.wlan0.forwarding=1
PostUp = iptables -A FORWARD -i wg1 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.9.1.0/24 -o wlan0 -j MASQUERADE
PostUp = ip6tables -A FORWARD -i wg1 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
#PostUp = ip route add 11.11.11.11/32 via 192.168.0.1 dev wlan0
PostDown = iptables -D FORWARD -i wg1 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.9.1.0/24 -o wlan0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg1 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
#PostDown = ip route del 11.11.11.11/32

[Peer]
PublicKey = qqq
AllowedIPs = 10.9.1.0/24
Endpoint = 11.11.11.11:7777

# Uncomment the following, if you're behind a NAT and want the connection to be kept alive.
PersistentKeepalive = 25

wgコマンドステータス:

interface: wg0
  public key: ddd
  private key: (hidden)
  listening port: 51820

peer: yyy
  endpoint: 11.11.11.11:51000
  allowed ips: 10.9.0.2/32
  latest handshake: 1 minute, 48 seconds ago
  transfer: 11.99 MiB received, 397.40 MiB sent

interface: wg1
  public key: ggg
  private key: (hidden)
  listening port: 35999

peer: qqq
  endpoint: 11.11.11.11:7777
  allowed ips: 10.9.1.0/24
  transfer: 0 B received, 525.95 KiB sent
  persistent keepalive: every 25 seconds

ベストアンサー1

現在IPv4設定が実行されている場合は、レイヤ4(UDPポート)を使用するポリシールーティングルールを使用して、同じサーバーに2つの異なるパスを提供できます。

したがって、そのパスを介してサーバーに移動するパスを使用するのではなく、そのパスを介して発生するとwlan0予想されるパスを上書きすることをお勧めします。eth0 良い:

ip route add 11.11.11.11/32 via 192.168.0.1 dev wlan0

代わりに、ポートセレクタを持つルールとそのルールで選択された代替ルーティングテーブルを使用して、さまざまなルーティングにWireGuardのソースポートを使用できます。最も簡単な方法は、固定されたローカルWireGuardポートを選択することです。 ISP2 の NAT のため、リモートシステムが他のポートを認識するかどうかは重要ではありません。ルーティングルールは、リモートシステムではなくローカルシステムでのみ重要です。

変更前は固定ソースポートがなく、11.11.11.11ポート7777へのパスが転送され、次のものを使用することを目的としていeth0ましたwlan0

# ip route get 11.11.11.11 ipproto udp dport 7777
11.11.11.11 via 192.168.100.1 dev eth0 src 192.168.100.200 uid 0 
    cache 
  • 固定ポート51821の使用wg1

    次の[Interface]セクションにこの行を追加しますwg1.conf

    ListenPort = 51821
    

    即時適用:

    wg set wg1 listen-port 51821
    
  • ISP2にワイヤレスゲートウェイを使用します。デフォルトパスを使用して、新しいルーティングテーブル(任意に1000を選択)を準備します。

    ip route add default via 192.168.0.1 dev wlan0 table 1000
    
  • このルーティングテーブルは、ローカルで起動されたUDPソースポートが51821の場合に選択されます(これはiif lo特殊な構文です)。地域的に始まった変えるルーティング/転送したがって、同じUDP送信元ポートを使用する付随的なトラフィックがあっても、他のルーティングトラフィックを妨げることはありません。

    ip rule add iif lo ipproto udp sport 51821 lookup 1000
    
  • 緩いリバースパス転送()が選択されているため、rp_filter=2どこかにデフォルトパスがあるため(同じインターフェイスにない場合でも)、応答をカスタマイズする必要はありません。

    したがって、どちらの場合も応答はwlan0。前と後:

    # ip route get iif wlan0 from 11.11.11.11 ipproto udp dport 51821 to 192.168.0.134
    local 192.168.0.134 from 11.11.11.11 dev lo 
        cache <local> iif wlan0 
    

しかし今、これらの変更の後には次のようになります。

# ip route get 11.11.11.11 ipproto udp sport 51821
11.11.11.11 via 192.168.0.1 dev wlan0 table 1000 src 192.168.0.134 uid 0 
    cache 

トラフィックは UDP 送信元ポート 51821 に対してのみ発生します。つまり、次を使用するのではなく、そのwg1インターフェイスに対してのみ発生します。他のWireGuardインターフェイスは影響を受けません。wlan0eth0

# ip route get 11.11.11.11 ipproto udp sport 51820
11.11.11.11 via 192.168.100.1 dev eth0 src 192.168.100.200 uid 0 
    cache 

実行する必要がある2つのコマンド(すでに追加されたリスニングポートに加えて)は、おそらく追加のエントリに統合されなければなりませんwg1.confPreUpPostUpPreDownPostDownwg1.conf

おすすめ記事