将 LAN 流量从 Edgerouter 路由到 wg0

将 LAN 流量从 Edgerouter 路由到 wg0

因此,我阅读并尝试了在互联网上能找到的所有信息,但我仍然无法理解这一点。我试图用 EdgeRouter X 上的 OpenVPN 实现一件对我来说似乎不可能用 WireGuard 实现的超级简单的事情:通过 VPN 接口路由来自 LAN 的所有流量,然后路由到互联网。

两端均通过wg show显示握手等方式正常连接。一端是 EdgeRouter,另一端是 AWS EC2 上的 Wireguard 服务器。

基本路由计划是/曾经是(与 OpenVPN 配合使用):

  • 0.0.0.0/0 连接至 eth0(本地 ISP)
  • 0.0.0.0/1 连接至 wg0 (VPN)
  • 128.0.0.0/1 连接至 wg0 (VPN)

将这 2 条路由切换为启用状态将导致所有互联网流量中断,但 LAN 设备仍可访问。路由器甚至无法访问ping 1.1.1.1。禁用这 2 条路由可立即恢复流量。

奇怪的是,当我打开两个路由时,wg0 Tx 峰值达到 ~80Mbps,但 Rx 没有任何变化。AWSwg show 服务器上显示发送/接收的数据包不多,路由器显示 Tx 数据包增加,没有 Rx。我觉得我的路由器端口有问题。我尝试(配置中未显示)将端口转发 54321 到 wg0,但没有成功。

这是我的 EdgeRouter 配置转储:

firewall {
    all-ping enable
    broadcast-ping disable
    ipv6-name WANv6_IN {
        default-action drop
        description "WAN inbound traffic forwarded to LAN"
        enable-default-log
        rule 10 {
            action accept
            description "Allow established/related sessions"
            state {
                established enable
                related enable
            }
        }
        rule 20 {
            action drop
            description "Drop invalid state"
            state {
                invalid enable
            }
        }
    }
    ipv6-name WANv6_LOCAL {
        default-action drop
        description "WAN inbound traffic to the router"
        enable-default-log
        rule 10 {
            action accept
            description "Allow established/related sessions"
            state {
                established enable
                related enable
            }
        }
        rule 20 {
            action drop
            description "Drop invalid state"
            state {
                invalid enable
            }
        }
        rule 30 {
            action accept
            description "Allow IPv6 icmp"
            protocol ipv6-icmp
        }
        rule 40 {
            action accept
            description "allow dhcpv6"
            destination {
                port 546
            }
            protocol udp
            source {
                port 547
            }
        }
    }
    ipv6-receive-redirects disable
    ipv6-src-route disable
    ip-src-route disable
    log-martians enable
    name WAN_IN {
        default-action drop
        description "WAN to internal"
        rule 20 {
            action accept
            description "Allow established/related"
            state {
                established enable
                related enable
            }
        }
        rule 30 {
            action drop
            description "Drop invalid state"
            state {
                invalid enable
            }
        }
    }
    name WAN_LOCAL {
        default-action drop
        description "WAN to router"
        rule 10 {
            action accept
            description "Allow WG"
            destination {
                port 54321
            }
            log disable
            protocol udp
        }
        rule 30 {
            action accept
            description "Allow established/related"
            state {
                established enable
                related enable
            }
        }
        rule 40 {
            action drop
            description "Drop invalid state"
            state {
                invalid enable
            }
        }
    }
    name WG_LOCAL {
        default-action drop
        description "WG to router"
        enable-default-log
        rule 10 {
            action accept
            description "Allow WG Port"
            destination {
                port 54321
            }
            log enable
            protocol udp
        }
    }
    options {
        mss-clamp {
            interface-type wg
            mss 1380
        }
    }
    receive-redirects disable
    send-redirects enable
    source-validation disable
    syn-cookies enable
}
interfaces {
    ethernet eth0 {
        address dhcp
        description Internet
        duplex auto
        firewall {
            in {
                ipv6-name WANv6_IN
                name WAN_IN
            }
            local {
                ipv6-name WANv6_LOCAL
                name WAN_LOCAL
            }
        }
        speed auto
    }
    ethernet eth1 {
        description Switch
        duplex auto
        speed auto
    }
    ethernet eth2 {
        description Wifi
        duplex auto
        speed auto
    }
    ethernet eth3 {
        description Office
        duplex auto
        speed auto
    }
    ethernet eth4 {
        description Local
        disable
        duplex auto
        poe {
            output off
        }
        speed auto
    }
    loopback lo {
    }
    switch switch0 {
        address 10.0.0.1/24
        description Local
        mtu 1500
        switch-port {
            interface eth1 {
            }
            interface eth2 {
            }
            interface eth3 {
            }
            interface eth4 {
            }
            vlan-aware disable
        }
    }
    wireguard wg0 {
        address 10.50.0.2/32
        description "Wireguard VPN"
        listen-port 54321
        mtu 1420
        peer <peer hash> {
            allowed-ips 0.0.0.0/0
            endpoint 1.2.3.4:54321
            persistent-keepalive 25
            preshared-key /config/auth/preshared.key
        }
        private-key /config/auth/priv.key
        route-allowed-ips false
    }
}
port-forward {
    auto-firewall enable
    hairpin-nat enable
    lan-interface switch0
    wan-interface eth0
}
protocols {
    static {
        interface-route 0.0.0.0/1 {
            next-hop-interface wg0 {
                description "All Local to VPN"
            }
        }
        interface-route 128.0.0.0/1 {
            next-hop-interface wg0 {
                description "All Local to VPN"
            }
        }
    }
}
service {
    dhcp-server {
        disabled false
        hostfile-update disable
        shared-network-name LAN {
            authoritative enable
            subnet 10.0.0.0/24 {
                default-router 10.0.0.1
                dns-server 10.0.0.1
                lease 86400
                start 10.0.0.38 {
                    stop 10.0.0.243
                }
            }
        }
        static-arp disable
        use-dnsmasq disable
    }
    dns {
        forwarding {
            cache-size 150
            listen-on switch0
            name-server 1.1.1.1
            name-server 1.0.0.1
        }
    }
    gui {
        http-port 80
        https-port 443
        older-ciphers enable
    }
    nat {
        rule 5010 {
            description "masquerade for WAN"
            outbound-interface eth0
            type masquerade
        }
        rule 5011 {
            description "masquerade for WG"
            log disable
            outbound-interface wg0
            protocol all
            type masquerade
        }
    }
    ssh {
        port 22
        protocol-version v2
    }
    unms {
        disable
    }
}
system {
    analytics-handler {
        send-analytics-report false
    }
    crash-handler {
        send-crash-report false
    }
    host-name my-net
    login {
        user admin {
            authentication {
                encrypted-password <hash>
            }
            level admin
        }
    }
    ntp {
        server 0.ubnt.pool.ntp.org {
        }
        server 1.ubnt.pool.ntp.org {
        }
        server 2.ubnt.pool.ntp.org {
        }
        server 3.ubnt.pool.ntp.org {
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone America/Montreal
}
traffic-control {
    smart-queue default {
        download {
            ecn enable
            flows 1024
            fq-quantum 1514
            limit 10240
            rate 105mbit
        }
        upload {
            ecn enable
            flows 1024
            fq-quantum 1514
            limit 10240
            rate 35mbit
        }
        wan-interface eth0
    }
}

答案1

您是否将0.0.0.0/1和添加128.0.0.0/1到主路由表?

您连接的 wireguard 服务器的 IP 是多少?如果您有这 3 条路由,而没有其他路由,那么您的 wireguard 客户端将如何到达远程?如果您将所有内容都放在主表上,那么您还必须添加一条静态路由,该路由从您的主接口到 wireguard 服务器的 IP。

您的 OpenVPN 服务器可能正在为特殊的 remote_host 推送一条路由,OpenVPN 客户端会将该路由解析为其连接到的任何 IP。

如果您在 wireguard 配置中设置AllowedIPs = 0.0.0.0/0,wg-quick 实际上会为您做一些神奇的事情来处理这个问题,这非常简洁和容易。

这些ip规则都添加上去,另外还添加了一个路由表。

$ ip rule
32764:  from all lookup main suppress_prefixlength 0
32765:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main

# ip route show table 51820
default dev wg0 scope link

wireguard 会默认为所有数据包添加一个 fwmark,值为 51820(51820 的十六进制值为 0xca6c)。

该规则from all lookup main suppress_prefixlength 0将忽略主表上的默认路由。

直接到 wireguard 对等外部 IP 的流量将不会被标记 fwmark,因此它将使用 32766 并出去默认路由。

无论如何,重点是,您可能不需要或不想要 Linux 上的0.0.0.0/1wireguard 128.0.0.0/1。与 OpenVPN 开箱即用的方式相比,它有更好的方法来处理重定向默认网关。

相关内容