(我正在编辑我自己的问题并为处于类似情况的其他人发布答案。)
我想要一个防火墙设备,该设备要求其外部接口上有公共静态 IP,以便与 ISP 认可的 ADSL 调制解调器一起使用。(不建议使用此设置,因为 ADSL 服务和调制解调器是消费级的,但我们需要省钱。)
调制解调器可以充当路由器,这意味着它将对所有流量进行 NAT,并在其外部接口上使用该服务的 1 个公共静态 IP。我们不能在此 NAT 后面使用公共子网,因为此 ADSL 服务不支持此功能。
另一种选择是,该调制解调器可以充当全桥,但防火墙设备无法终止 PPP 链路。
我可以买到一款支持半桥模式的调制解调器(DrayTek Vigor 120)(DrayTek 称之为“True-DMZ”),其中调制解调器后面的一台设备被分配了 ADSL 链路的一个公共静态 IP 地址。这很管用,但不幸的是,我们在使用这款调制解调器时遇到了与 ADSL 线路无关的问题,无法从我们的 ISP 获得任何支持。
如何配置 Linux PC 使其以半桥模式终止 PPP 链路?
答案1
我在一台有三块网卡的 PC 上使用 Debian(一块用于管理,一块用于连接调制解调器,一块用于连接防火墙)。最后我得到了 eth0=管理、eth1=调制解调器、eth2=防火墙、ppp0=ADSL 服务和 lo。
- 准备装有 ppp 的 PC(如果需要,还要准备好 pppoeconf)[注意:当所有设置完成后,这台 PC 将失去与互联网的连接]
- 将调制解调器置于全桥模式
- 配置ppp并连接,测试连接等。
- 将 eth1 和 eth2 配置为“自动 ethX“和”iface ethX“在 /etc/network/interfaces 中
将以下内容添加到 /etc/ppp/ip-up (就在“run-parts”行之前):
ifconfig ppp0位于您永远不会使用的子网中的 IP/该子网的 CIDR
ifconfig eth2 启动
ifconfig eth2你的公共 IP/您的公共子网
ip 路由删除默认
ip 路由添加默认 dev ppp0
ip 路由刷新缓存
您最终应该得到如下所示的路由表:
- 0.0.0.0/0 ppp0
- 你的公共 IP 网络/你的公共 IP 的子网eth2
- 你不关心的网络/子网点对点0
其运作方式如下:
- eth1 不需要 IP 地址,因为 PPPoE 是一种帧协议
- eth2 获取与你的公网 IP 在同一子网中的另一个 IP
- ppp0 获得一个你不关心的 IP(但不会与你关心的任何内容冲突)
- 当数据包从 ADSL 到达时,它的源将是其他公共 IP,而它的目的地将是你的公共 IP:它将从 eth2 传出(由于路由 #2)
- 当数据包从防火墙到达时,它的源将是您的公共 IP,而它的目的地将是其他公共 IP:它将从 ppp0 传出(由于默认路由)
例子:
假设您的公共 IP 是 1.1.1.100/24,网关是 1.1.1.1(我们的 ISP 为我们分配了类似的东西;据我了解,您通常会得到 1.1.1.100/32,没有网关)。还假设 172.16.1.0/24 是您永远不会在任何地方使用的网络。所以:
ifconfig ppp0 172.16.1.1/24
ifconfig eth2 up
ifconfig eth2 1.1.1.101/24
ip route delete default
ip route add default dev ppp0
ip route flush cache
您的路线表:
- 0.0.0.0/0 ppp0
- 1.1.1.0/24 eth2
- 172.16.1.0/24 ppp0
请注意,您分配的是 eth2 1.1.1.101,而不是 1.1.1.100。Eth2 需要与您的公共 IP 位于同一子网,但不能与公共 IP 本身位于同一子网。
警告:
您需要使用 ISP 使用的真实子网(例如 1.1.1.0/24)或创建一个假子网(并使用 /30 使其尽可能小)。互联网上此子网中的其他 IP(通常是 ISP 的其他客户)将无法访问。