究极万兆软路由搭建: RouterOS 主路由搭建

Part 2: RouterOS 主路由搭建

RouterOS 系统导入到 ESXi

解决 ESXi 6.7 U2 的 UI Bug

由于 ESXi 6.7 U2 中导入虚拟机的地方存在 JavaScript bug, 需要将 UI 降级或者使用 ESXi 6.7 U3 版本才能正常导入虚拟机。相关的 ESXi UI 降级补丁文件是 esxui-signed-12086396.vib (本站备份), 安装方式与网卡驱动的安装相同。

部署 MikroTik RouterOS

文件准备

  • 下载文件: MikroTik RouterOS x86 6.44.1,已激活L6授权 ,可升级,永久使用.rar
  • 解压后得到文件: MikroTik-RouterOS-6.44.2.ova

部署步骤

  1. 选择从 OVF 或 OVA 文件部署虚拟机

    Snipaste_2020-02-19_04-17-50.png

  2. 上传虚拟机文件

    Snipaste_2020-02-19_04-19-08.png

  3. 选择磁盘位置

    Snipaste_2020-02-19_04-19-30.png

  4. 取消勾选自动打开电源

    Snipaste_2020-02-19_04-20-09.png

  5. 完成

    Snipaste_2020-02-19_04-20-34.png

  6. 编辑虚拟机网卡设置, 然后启动

    Snipaste_2020-02-19_04-20-34.png

配置主路由器

将路由器通过网线直连到电脑。在电脑上安装 WinBox 用于配置路由器

配置接口名称

  1. 打开 WinBox, 进入 Interfaces -> interface 页面
  2. 为路由器的网卡设置易识别的名称
  3. 根据 MAC 地址对比 ESXi 中网卡设置, 确保名称和功能一一对应

Snipaste_2020-02-19_05-27-19.png

配置需求概述

总结一下我们要设置的内容

  1. RouterOS 安全设置, 增强路由器安全性
  2. 3 条宽带使用 DHCP Client 从光猫拨号的 WAN 接口获取局域网 IP 地址
  3. 1 条宽带 PPPoE 双播
  4. LAN 口设置 DHCP Server, 为内网设备分配 IP 地址
  5. DNS 设置, 配置路由器的 DNS 服务
  6. DHCPv6 Client, 配置 IPv6 地址
  7. PCC Load Balancing, 实现多线路负载均衡
  8. Routing rules, 设置路由规则
  9. Firewall NAT, 配置端口映射

RouterOS 安全设置

  1. 给路由器设置密码: 进入 System -> Password 修改路由器登录密码, 密码越复杂越好
  2. 关闭不必要的服务: 进入 IP -> Services 关闭除 winbox 以外的所有服务, 减少潜在的安全风险。

创建 DHCP Client

从光猫拨号的设备获取IP地址

  1. 选择 IP -> DHCP Client
  2. 添加新的 DHCP Client
    1. 取消勾选 Use Peer DNS
    2. 取消勾选 Use Peer NTP
    3. Add Default Route 选择 no
  3. 根据需求添加三个 DHCP Client, 并为每个 Interface 选择正确的网卡

Snipaste_2020-02-19_06-35-47.png

创建 PPPoE 拨号

  1. 打开 Interfaces -> interface
  2. 添加一个 PPPoE Client
    1. 取消勾选 Dial On Demand
    2. 取消勾选 Use Peer DNS
    3. 取消勾选 Add Default Route

Snipaste_2020-02-19_06-50-36.png Snipaste_2020-02-19_06-52-24.png

创建 LAN 口 DHCP Server

创建 IP 分配范围 (Pool)

  1. 建立 DHCP 服务器, 先创建 IP 分配范围 (Pool)
  2. 打开 IP -> Pool
  3. 添加一个新的 Pool, 定义 DHCP 分配的 IP 地址范围

Snipaste_2020-02-19_08-58-02.png

配置 DHCP Server

  1. 打开 IP -> DHCP Server
  2. 设置 LAN 口网卡
  3. 设置地址池
  4. 设置网关地址为主路由器地址 (例如 192.168.1.1)
  5. DNS 地址同样设置为主路由器地址 (例如 192.168.1.1) DNS 配置需根据实际网络情况设置

Snipaste_2020-02-19_08-59-32.png

Snipaste_2020-02-19_09-01-04.png

配置 DNS 服务

在 RouterOS 中配置 DNS 服务, 用于解析网络中的域名。

  1. 在 WinBox 菜单中选择 IP -> DNS
    1. Servers 推荐使用 DNSPod 的公共服务器
      • IPv4 119.29.29.29
      • IPv6 2402:4e00::
    2. Allow Remote Requests 勾选此项允许路由器作为内网设备的 DNS 服务器, 处理来自局域网的域名解析请求
    3. Cache Size 设置 DNS 缓存大小 (默认值一般足够)

151907-764x640.png

这里的 Dynamic Servers 2408:8000::8 就是 WAN-500M-CU-2:1-pppoe 里勾选 Use Peer DNS 获取到的 IPv6 的 DNS 服务器

Snipaste_2020-02-19_09-09-37.png

  • Dynamic Servers 是通过路由器的 WAN 接口 (如 PPPoE 或 DHCP Client) 自动获取的 DNS 服务器地址
  • 如果需要使用特定的 DNS 服务器 (如 Google DNS 或其他公共 DNS), 可以在 Servers 中手动添加。自定义的 DNS 服务器优先于动态获取的 DNS 服务器

配置 IPv6 (DHCPv6)

目前 IPv6 已在许多地区普及, 尤其是家庭宽带, 这里三个家宽已经支持 IPv6 了。通过 RouterOS, 可以为路由器设置 IPv6, 并实现 IPv4 和 IPv6 双栈 (Dual-stack) 运行, 以支持现代网络需求。

IPv6 地址基础知识

  • IPv6 地址的长度为 128 位: 共有 2128 个地址
  • 前缀长度是 IPv6 地址的一种表示方式, 表示一个完整的 IPv6 地址块
    • /32: 分配给大型网络运营商, 包含 296 (128 - 32) 个地址
    • /48: 分配给中型企业, 包含 280 (128 - 48) 个地址
    • /56: 分配给小型企业, 包含 272 (128 - 56) 个地址
    • /64: 分配给单一子网, 包含 264 (128 - 64) 个地址
  • 双栈技术: 允许 IPv4 和 IPv6 在同一网络中共存, 提供更广泛的兼容性

配置 DHCPv6 客户端

  1. 打开 IPv6 -> DHCP Client
  2. 添加新的 DHCPv6 客户端
    1. Interface 选择 PPPoE 拨号连接 (如 WAN-500M-CU-2:1-pppoe)
    2. Request 勾选 prefix
    3. Pool Name IPv6 地址池名称, 如 WAN-500M-CU-2:1-pppoe
    4. Pool Prefix Length 根据运营商分配填写, 我这里分配到的 IPv6 前缀是 60 (常见为 64、56 或 48)
    5. 选项
      1. 勾选 Use Peer DNS
      2. 勾选 Add Default Route
      3. 勾选 Rapid Commit
  3. 点击 OK

成功获取后, 状态显示为 Status:bound

Snipaste_2020-02-19_10-04-47.png

配置 IPv6 地址

  1. 打开 IPv6 -> Addresses, 添加新的地址
    1. Address 填写 ::/64
    2. From Pool 选择刚刚创建的 Pool Name (如 WAN-500M-CU-2:1-pppoe)
    3. Interface 选择 LAN 端口 (例如 LAN1)
    4. 勾上 Advertise
  2. 点击 OK

Snipaste_2020-02-19_10-33-17.png

验证 IPv6 配置

检查 Windows 网卡 IPv6 连接状态

8d0c1538494775.png

  1. 打开浏览器访问: http://test-ipv6.com/
  2. 测试页面会显示 IPv6 和 IPv4 的连接状态

Snipaste_2020-02-19_10-35-19.png

RouterOS 的总体设置

aeea1546931331.png

PCC 负载均衡按权重比例

PCC (Per Connection Classified) 是一种基于连接分类的负载均衡技术, 可按照比例将流量分配到多条出口线路。适用于出口带宽相同或相似的线路, 确保负载均衡的效果最佳。

假设网络环境中存在两条相同运营商的出口带宽线路

  • 一条为 8M 带宽
  • 一条为 25M 带宽

通常情况下, PCC 常被用于多条相同带宽, 运营商出口的负载均衡, 而这次则利用其分类原理, 实现了按比例权重的路由策略

Snipaste_2020-02-26_14-22-55.png

需要通过 PCC 实现按比例的负载均衡路由策略。实现原理比较简单, 一条 8M, 一条是 25M, 后者大约是前者的 3 倍带宽, 所以约等于 1:3 (8/33 : 25/33), 将流量分配为 1:3 的权重路由策略。

实现原理

  • 将流量划分为 4 份, 按照 1:3 的比例分别分配给两条线路
  • 8M 带宽分配 1 份, 25M 带宽分配 3 份
  • PCC 使用 both-addresses:4/n 分类流量, n 表示当前流量的划分编号

Firewall Mangle 配置

通过 Mangle 标记连接和路由。src-address-list=userip 可根据实际需求设置启用负载均衡的 IP 地址列表

/ip firewall mangle
add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=pcc1 passthrough=yes per-connection-classifier=both-addresses:4/0 src-address-list=userip
add action=mark-routing chain=prerouting connection-mark=pcc1 new-routing-mark=r1 passthrough=yes src-address-list=userip

add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=pcc2 passthrough=yes per-connection-classifier=both-addresses:4/1 src-address-list=userip
add action=mark-routing chain=prerouting connection-mark=pcc2 new-routing-mark=r2 passthrough=yes src-address-list=userip

add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=pcc3 passthrough=yes per-connection-classifier=both-addresses:4/2 src-address-list=userip
add action=mark-routing chain=prerouting connection-mark=pcc3 new-routing-mark=r3 passthrough=yes src-address-list=userip

add action=mark-connection chain=prerouting dst-address-type=!local new-connection-mark=pcc4 passthrough=yes per-connection-classifier=both-addresses:4/3 src-address-list=userip
add action=mark-routing chain=prerouting connection-mark=pcc4 new-routing-mark=r4 passthrough=yes src-address-list=userip

Snipaste_2020-02-26_14-16-28.png

路由配置

其实权重的分配关键就在路由设置上, 这里我们把网关命名为 8M 和 25M 以示区分。将标记的路由流量按照 1:3 的比例分配到两条线路

/ip route
add check-gateway=ping gateway=8M routing-mark=r1
add check-gateway=ping gateway=25M routing-mark=r2
add check-gateway=ping gateway=25M routing-mark=r3
add check-gateway=ping gateway=25M routing-mark=r4

Snipaste_2020-02-26_14-17-57.png

NAT 配置

为出口线路配置 NAT 规则

/ip firewall nat
add chain=srcnat action=masquerade out-interface=8M
add chain=srcnat action=masquerade out-interface=25M

Snipaste_2020-02-26_14-21-18.png

完成上述配置后, 路由器将实现按比例的负载均衡, 流量分配符合预期策略。

PCC 负载均衡多线路 (ISP)

PCC 介绍

PCC (Per Connection Classifier) 是 RouterOS 的一项功能, 主要用来根据网络数据包的特定属性 (如源地址、源端口、目的地址、目的端口等) 进行分类, 从而实现流量分流和负载均衡。它通过查看 IP 包头信息, 使用特定的 Hash 算法对数据包进行分类, 并根据预设规则将数据包分配到不同的线路或连接上。

网络拓扑

PCC 通常用于多线路接入场景, 需至少两条 ISP 线路参与。本次示例中, 使用两条公网线路进行演示。

拓扑.png

如图所示, 网络拓扑包括以下组件

  • 两条公网线路, 分别为 1.1.1.100 (WAN1) 和 1.2.1.100 (WAN2)
  • 路由器内网网卡地址为 172.16.0.254 (LAN)
  • 内网服务器地址为 172.16.0.222

标记公网流量

由于存在两条公网线路, 流量进入时必须知道是从哪条线路进入, 并确保从同一线路返回, 因此需要标记 WAN 口进入的流量。

/ip firewall mangle
add action=mark-connection chain=prerouting in-interface=WAN1 new-connection-mark=WAN1_conn
add action=mark-connection chain=prerouting in-interface=WAN2 new-connection-mark=WAN2_conn

创建 PCC 规则

这里我们选择基于源地址创建 PCC 规则, 需要注意的是, PCC 策略从 0 开始计数。

例如, 当使用 per-connection-classifier=both-addresses:2/0 时, 2 表示划分为两组, 2/0 是第一组, 2/1 是第二组

/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=LAN new-connection-mark=WAN1_conn per-connection-classifier=both-addresses:2/0
add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-type=!local in-interface=LAN new-connection-mark=WAN2_conn per-connection-classifier=both-addresses:2/1

根据标记创建动态策略路由

标记数据包后, 我们需要根据这些标记分别创建路由规则, 解决多网关和流量负载均衡问题

/ip firewall mangle
add action=mark-routing chain=prerouting connection-mark=WAN1_conn in-interface=LAN new-routing-mark=to_WAN1
add action=mark-routing chain=prerouting connection-mark=WAN2_conn in-interface=LAN new-routing-mark=to_WAN2
add action=mark-routing chain=output connection-mark=WAN1_conn new-routing-mark=to_WAN1
add action=mark-routing chain=output connection-mark=WAN2_conn new-routing-mark=to_WAN2

创建路由

为所有规则创建路由表

/ip route
add check-gateway=ping dst-address=0.0.0.0/0 gateway=WAN1 routing-mark=to_WAN1
add check-gateway=ping dst-address=0.0.0.0/0 gateway=WAN2 routing-mark=to_WAN2

创建故障转移路由

防止任意线路中断

/ip route
add check-gateway=ping distance=1 gateway=WAN1,WAN2

创建 NAT 规则

伪装方式分为两种: masqueradesrc-nat, 根据需要选择相应配置。

  • masquerade 适合动态 IP 环境
  • src-nat 更适合静态 IP, 且在 NAT 转换效率上更高

masquerade 属于 src-nat 的一种, 是 src-nat 的特殊转化, 它的不同在于, 它会根据包出去的 interface, 自动将包源地址转化为对应 interface 所属网络的路由器 IP, 端口随机, 也即 masquerade 的转换是智能化设置的, 起到一个简化设置的作用。其他功能和处理方式跟 src-nat 是一样的。

虽然动态 IP 也可以使用 src-nat 配合脚本检测外网 IP 变动后刷新规则, 但这种方法并不推荐

/ip firewall nat
add chain=srcnat action=masquerade out-interface=WAN1
add chain=srcnat action=masquerade out-interface=WAN2

此时, PCC 多线路负载均衡就建立完成了。通过 172.16.0.222 访问公网, 你会发现, 两条线路中断任意一条均不影响正常访问。同时, 开启迅雷等支持 P2P 方式下载的软件时, 会发现带宽增加了一倍

创建端口转发规则

因为此时为 2 条出口线路, 所以端口转发规则也需要建立两条, 因为之前根据入口标记了流量, 所以从任意线路进入的流量均会原路返回。

这条规则将会把 2 条线路的 tcp80 端口转发到 172.16.0.222 机器的 tcp80 端口

/ip firewall nat
add chain=dstnat protocol=tcp dst-port=80 dst-address=1.1.1.100 action=dst-nat to-addresses=172.16.0.222 to-ports=80
add chain=dstnat protocol=tcp dst-port=80 dst-address=1.2.1.100 action=dst-nat to-addresses=172.16.0.222 to-ports=80

以上分流规则可以借鉴, 但在新版本则测试失败 per-connection-classifier=both-addressesboth-addresses 均无法正常使用

PCC 负载均衡 PPPoE 方案

来自于一个 TG 大佬的分享, 适用于 WAN PPPoE 负载均衡配置。
2 WAN PPPoE балансировка нагрузки с использованием PCC.txt

需要将 both-addresses 设置为 both-addresses-and-ports, 才能确保正常使用。PCC 建议按照 txt 里的命令设置

/ip address
add address=192.168.50.2/24 network=192.168.50.0 broadcast=192.168.50.255 interface=Local
add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=WAN1
add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=WAN2
/ip firewall mangle
add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_conn
add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_conn
add chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1
add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2
add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes
add chain=prerouting connection-mark=WAN1_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN1
add chain=prerouting connection-mark=WAN2_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN2
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_WAN1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_WAN2 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=ping
/ip firewall nat
add chain=srcnat out-interface=WAN1 action=masquerade
add chain=srcnat out-interface=WAN2 action=masquerade

设置路由规则

设置目标 IP 或者 IP 段走特定线路出口

  1. 打开 IP -> Routes -> Rules

  2. 添加新的路由规则

    1. Src. Address 设置为 0.0.0.0/0 (表示来源地址不限)
    2. Dst. Address 输入目标地址的 IP (如 1.1.1.1) 或 IP 段 (如 1.1.1.0/24)
    3. Table 选择对应的出口线路标记
  3. 点击 OK 保存

Snipaste_2020-02-28_12-35-45.png

双线接入 联通 IP 走联通出口 电信 IP 走电信出口

实现这一功能的最优方法是使用 BGP 路由表, 通过设置 BGP 过滤规则实现分流。

BGP 路由表是动态更新的, 能够实时反映网络变化, 但由于获取 BGP 会话的难度较高, 这种方法并不适合大多数用户。因此, 可以采用一种低成本的替代方案, 即使用他人每日定时从 BGP 会话中提取的静态路由表, 并将其导入路由器作为分流规则。

然而, 静态路由表也有一定的缺点。即使通过脚本实现每日定时更新以保持路由表的最新状态, 在更新路由表的过程中, 仍可能导致连接中断, 影响网络的稳定性。

例如, jacyl4/ros-pbr-CT-CMCC 项目中提供了整理好的 IP 段规则表。如果路由表 (Table) 的名称不是默认的 CT, 需要先将其修改为 to_WAN1to_WAN2, 然后再上传到路由器。

除了手动下载和导入静态路由表外, 我们还可以通过脚本自动生成和更新所需的静态路由数据。以下是一个脚本示例

#!/bin/sh

mkdir -p ./pbr
cd ./pbr

# 电信
wget --no-check-certificate -c -O ct.txt https://ispip.clang.cn/chinatelecom_cidr.txt
# 联通
wget --no-check-certificate -c -O cu.txt https://ispip.clang.cn/unicom_cnc_cidr.txt
# 移动
wget --no-check-certificate -c -O cm.txt https://ispip.clang.cn/cmcc_cidr.txt
# 铁通
wget --no-check-certificate -c -O crtc.txt https://ispip.clang.cn/crtc_cidr.txt
# 教育网
wget --no-check-certificate -c -O cernet.txt https://ispip.clang.cn/cernet_cidr.txt
# 长城宽带/鹏博士
wget --no-check-certificate -c -O gwbn.txt https://ispip.clang.cn/gwbn_cidr.txt
# 其他
wget --no-check-certificate -c -O other.txt https://ispip.clang.cn/othernet_cidr.txt

{
    echo "/ip route rule"
    
    for net in $(cat ct.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CT"
    done
    
    for net in $(cat cu.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CT"
    done
    
    for net in $(cat cm.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CMCC"
    done
    
    for net in $(cat crtc.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CMCC"
    done
    
    for net in $(cat cernet.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CT"
    done
    
    for net in $(cat gwbn.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CT"
    done
    
    for net in $(cat other.txt) ; do
        echo "add dst-address=$net action=lookup table=to_CT"
    done
} > ../ros-pbr-CT-CMCC.rsc

将生成的规则表上传至 RouterOS 后, 在终端执行以下命令完成导入。规则表会导入到 IP -> Routes -> Rules

/import ros-pbr-CT-CMCC.rsc
设置自动更新

为了确保路由表始终保持最新, 我们可以设置脚本定期自动下载和导入路由表。以下是实现自动更新的脚本

:local addr "https://ghproxy.net/https://raw.githubusercontent.com/jacyl4/chnroute/main/ros-pbr-CT-CMCC.rsc"
:local result ([/tool fetch mode=https output=user url=$addr as-value])
:if ($result->"status" = "finished") do={
    /file remove [find name="ros-pbr-CT-CMCC.rsc"]
    /tool fetch url=$addr
    # /ip route rule remove [find table=main]
    /ip route rule remove [find table=to_CT]
    /ip route rule remove [find table=to_CMCC]
    # /ip route rule add src-address=10.0.0.14/32 action=lookup table=main
    /import ros-pbr-CT-CMCC.rsc
}

Firewall NAT 端口映射

端口映射可以分为两种类型: 对等映射和不对等映射

  • 对等映射: 即内网的 80 端口映射到外网的 80 端口, 这种映射方式是对等的。
  • 不对等映射: 即内网的 80 端口映射到外网的 90 端口, 或者映射到任意其他端口, 这种映射方式是不对等的。

需要注意的是, 如果你的 RouterOS 环境是多线接入, 必须为进入的数据包设置路由标记, 然后再进行端口映射。这是因为在多线接入的情况下, 流量需要从相同的线路返回, 确保数据包能够正确地通过指定的出口进行往返传输。

如果网络中有旁路由, 则需要将局域网的网关设置为主路由 (RouterOS) 的网关, 只有这样, NAT 规则才会生效。

0303160029.png

20180513215925.png 20180513220318.png

测试时, 避免在路由器的局域网内进行测试, 因为可能会遇到 NAT Loopback 问题。建议通过手机使用 4G 网络进行测试, 以避免这种问题。

NAT Loopback / Hairpin NAT

还没整明白.jpg

扩展阅读

端口映射成功, 但显示的外网 IP 都是路由器的地址

在 RouterOS 上进行端口映射成功后, 外网可以正常访问内网的服务器, 但在内网机器上使用 netstat -n 查看时, 显示的连接地址都是路由器的网关地址 (如 192.168.1.1), 而不是外网访问的真实 IP

例如, 外网 IP: 219.138.144.129 的用户访问内网 FTP 服务器 192.168.1.6, 但是在 FTP 服务器上使用 netstat -n 查看时, 显示的连接地址是 192.168.1.1, 而不是 219.138.144.129

在 RouterOS 的 NAT 配置栏目中我是这样设置的

General 选项
Chain: dstnat
Src.address: 219.138.144.129
Dst.address: 我的外网 IP 地址
Protocol: 6 (tcp)
Dst.port: 21

Action 选项
Action: dst-nat
To addresses: 192.168.1.6
To Ports: 21

请问我的设置是否有问题?如何才能使外网 IP 直接显示在内网机器上?

由于机器和网络资源有限, 且出于安全考虑, 我只允许指定的几个 IP 访问我的 FTP 服务器, 其他未指定的 IP 无法访问我的外网 IP。

问题原因

这个问题的根本原因是没有正确处理出站流量的源地址转换。在映射过程中, 外网流量访问内网时, NAT 会将源 IP 地址转换为路由器的 IP 地址。要避免这种情况, 必须为源流量做额外的伪装处理。

解决方案

在 RouterOS 中, 应该在 NAT 中添加一个 Masquerade 规则。具体配置如下

General 选项
Chain: srcnat
Src.address: 192.168.1.0/24 (你的内网 IP 段)
其他项留空

Action 选项
Action: masquerade

注意 General 选项中的 Src.address: 必须指定你内网的 IP 段, 如 192.168.1.0/24。如果没有指定或者写为 0.0.0.0/0, 则会导致外网访问时显示的都是路由器的网关 IP 地址, 而不是外网的真实 IP。

通过这种设置, NAT 将对内网的出站流量进行伪装处理, 避免出现连接时显示路由器网关地址的问题。

  • 配置完上述 NAT 规则后, 外网用户访问内网的服务时, 在 netstat -n 上会显示外网的真实 IP 地址, 而不是路由器的内网地址。
  • 只允许指定 IP 访问 FTP 服务器的要求, 可以通过添加防火墙规则来实现, 限制只有特定 IP 才能访问对应端口。

千兆多网卡桥接 = 路由器 + 多口千兆交换机

对于使用 RouterOS 软路由的朋友来说, 如果家里局域网需要多口千兆的交换机, 购买一个多口千兆交换机可能增加不少成本。实际上, 如果 RouterOS 软路由所在的计算机主板有足够的 PCI 插槽, 或者集成了双口千兆网卡, 可以按照以下方法实现多口千兆交换机的功能。

假设你的网络环境是通过 ADSL 拨号上网, WAN 口使用 100M 网卡, 并且有五块千兆网卡 (ether1 到 ether5) 组成 LAN 网络, 而 WAN 口为 ether6, 设置步骤如下

  1. 创建一个桥接接口

    首先, 创建一个名为 mybridge 的桥接接口

    /interface bridge add name="mybridge" disable=no
    
  2. 将五个千兆网卡加入桥接

    ether1ether5 五块网卡添加到桥接接口中

    /interface bridge port add interface=ether1 bridge=mybridge
    /interface bridge port add interface=ether2 bridge=mybridge
    /interface bridge port add interface=ether3 bridge=mybridge
    /interface bridge port add interface=ether4 bridge=mybridge
    /interface bridge port add interface=ether5 bridge=mybridge
    

    至此, 五块网卡已经组成了一个桥接

  3. 为桥接接口设置 IP 地址

    接着, 为 mybridge 桥接接口设置一个 IP 地址, 如 192.168.1.1/24

    /ip address add address=192.168.1.1/24 interface=mybridge
    
  4. 连接到 RouterOS

    完成上述设置后, 你可以使用 Winbox 连接到 RouterOS 进行进一步的配置, 所有其他设置都可以在 Winbox 中操作

  5. 使用桥接接口作为交换机

    此时, ether1ether5 的五个网口就相当于一个千兆交换机, 性能要优于普通的千兆交换机。通过这种方式, 可以大幅降低硬件成本, 同时提升网络性能


原文

Manual:Cloud Hosted Router - CHR 官方文档
基于RouterOS和RHEL的无障碍网络访问解决方案
【ROS+LEDE合用】双线聚合,真旁路,超绝加速Burst Link【上篇】
【ROS+OpenWrt合用】双线聚合,真旁路,超绝加速Burst Link【下篇】
ESXI打造最强家庭软路由系统ROS+LEDE+全能NAS方案(2018版) 图片不稳定
本教程只是简单的ROS 基本配置 包括PPPOE DHCP DNS 伪装 和 Firewall Bridge Addresses
RouterOS配置原生IPv6(电信IPv4/IPv6双栈)
ROS软路由功能强大的ROS系统,PCC 实现比例权重路由
官方文档: Manual:PCC
干货!RouterOS 多线路 PCC 负载均衡及端口映射
pppoe端口映射(port mapping)
為你的RouterOS 設定NAT loopback (Hairpin NAT)
官方文档 Hairpin NAT
ROS端口映射成功,但显示的外网IP都是路由器的地址
ROS 千兆多网卡(lan)桥接 =路由器+多口千兆交换机
Mikrotik RouterOS 通过 VRRP 实现单线多拨

最后更新于 2022-02-03
使用 Hugo 构建
主题 StackJimmy 设计
时间过了 2.5 年