私は次の構成を持っています:
両方のインターフェイスはeth0
ISP1を介して接続され、wlan0
ISP2を介してインターネットに接続されます。両方の接続は異なるIPアドレスを持ち、インターネット接続を許可します。
私は2つのwireguardインターフェイスを設定wg0
しましたwg1
。wg0
eth0
wg1
wlan0
私が経験している問題は、同じリモートサーバーピア(たとえば、ピアwan ip)を使用して両方の11.11.11.11
サーバーに同時に接続していることです。したがって、パケットが到着すると、通過するのではなく通過しようとすることができます。固定ルーティングルールを追加しようとしましたが、問題は、接続がそのルートを介して送信される必要があるため、常にルートを通過する必要がないことです。 。wg0
wg1
wg1
eth0
wlan0
11.11.11.11
wlan0
eth0
eth0
話す方法はありますか?接続は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インターフェイスは影響を受けません。wlan0
eth0
# 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.conf
。PreUp
PostUp
PreDown
PostDown
wg1.conf