有没有 PPPoE 代拨转为 DHCP 下发 IP 的方法?

4 天前
 yyy134341

如果一个 ISP 提供多个动态 IP ,但需要 PPPoE 认证取得 现在有一台路由器,接入到了 ISP 的末端设备。

但我想实现的是:

一句话总结相当于是当 ISP 仅提供 PPPoE ,实现通过某种方式使路由器其下设备无感获取来自 ISP 的动态 IP

目前经过搜寻只得到 ikuai 有所谓“PPPoE 代拨”的功能,但是已经实操过,发现旗下的设备拿到的也是在 ikuai 上面设定 PPPoE Server 时设定好的地址池里面的地址,并不是实际 ISP 分配的动态公网地址,该方案失败 https://www.ikuai8.com/support/ymgn/lyym/rzjf/2023-02-17-01-14-57.html

想问问大家有没有可以实现的方法?

2424 次点击
所在节点    宽带症候群
40 条回复
arrow629
4 天前
能接受像阿里云 ECS 那样的 1:1 NAT 吗,因为目前 IP 地址肯定是分配到 PPPoE 的 Endpoint 也就是你路由器上的,如果要修改就要自己改代码重新编译,目前我是想在路由器上同时建立多个 PPPoE Session ,拿到多个公网 ip ,内网设备分配固定的内网 IP ,在 NAT Rule 上做动态的 1:1NAT 。目前我是看到 OpenWRT 上有这个方案 https://chehtan.dev/97-openwrt-11-nat-with-a-public-ip-address-pool/ 你可以考虑一下行不行。
yyy134341
4 天前
@arrow629
那好像就跟 ikuai 的方案其实是一样的?
主楼中给出的 ikuai 链接提到
“以上账号校验成功后,将地址进行用户内网 IP 和代拨成功的 IP 数据进行一对一 NAT 转换,实现内网用户代拨上网的功能。”
也就是说客户端的私有 IP 和所代拨回来的公有 IP 是绑定的,相当于 DMZ 过去而已

但还是无法解决客户端拿到的 IP 是私有的问题

不过谢谢提供思路:)
arrow629
4 天前
@yyy134341 能说下你在什么场景下需要将公网 IP 直接分配到内网设备吗?一般 1:1NAT 的使用体验和公网 IP 是差不多的,如果你是要在设备上获取这个 NAT 后的 IP 所对应的公网 IP 的话,在公网搭建一个 api 返回公网 IP 就行了
tavimori
4 天前
如果是 Linux 路由器的话,应该可以用某种方式 hook dhcp server 的请求,然后用脚本触发一个 PPPoE 连接,并依据连接的信息分配 IP 地址。但是如果要让 IP 地址和 PPPoE 一样的话,那么通常路由器也需要有一个同网段的 IP 地址作为告知用户的网关地址。
听起来技巧主要是找一个合适的 DHCP 服务器软件,可以 hook 出地址池分配的逻辑就行。或许也可以借用一些 RADIUS 认证的机制。
另外就是要注意一下生命周期,比如可以在租约有效期限内维持 PPPoE ,租约到期以后断开,这样的话或许也要 hook 到 DHCP 租约到期的逻辑。
ttvast
3 天前
你的需求违反了 ip 协议最基本的逻辑.
比如 pppoe 的这台机器获得的 ip,和你 dhcp 机器获得的 ip 是完全一样的,这就不是 ip 协议的初衷.
只有 hack 得很深的方案,才有可能实现你的需求,而且还需要打磨很久才可能稳定.
Ipsum
3 天前
有个加钱上专线的固定 ip 的方案,看你要不要😁
xqzr
3 天前
DHCP 服务器,似乎无法主动更换,客户端的 IP
jayhuang0044
3 天前
光猫 路由器 设备
设备想跳过 光猫 路由器 获得公网 IP?

IPv6?
jayhuang0044
3 天前
或者你是想实现, 动态代理 IP 多功能?
fuzzsh
3 天前
理论上可以,重写 bridge/dial-in/dhcp ,两个网口加到 bridge ,client 先拿取 pc mac 后在 dial-in 即停止,将信息转交 dhcp
xjzshttps
3 天前
理论手写 bpf+xdp ,
拦截修改包应该能做到你要的效果。
busier
3 天前
OP 需求其实是 BGP 和 AS 自治域

在 PPPoE 这个二层协议上纠结个毛线
life90
3 天前
楼主应该只是想解决一个下发地址认证的问题。但是其实有很多方法实现。不用纠结在 pppoe 拨号认证这个方式。802.1 认证,Mac 地址认证,或者自己编写特殊的认证方式配合 dhcp 也是可行的。
life90
3 天前
但是你后面说的接收来自 ISP 的 dhcp 那肯定是不行的。你要控制,就只能自建 dhcp 服务。
unused
3 天前
预拨号,hook 脚本把地址、dhcp 地址池、路由配好就行了。
按需拨号比较麻烦,dhcp 需要支持外接 IPAM ,或者绕道 radius 。
yyy134341
3 天前
@jayhuang0044 #8
v6 是路由器拿到 DHCP-PD 通过 DHCP 下发给子设备的,这个路由器普遍都有这个功能
但是 v4 地址运营商只提供了 PPPoE 的方式,拨一个号就给一个,可以多拨多拿,但是是动态的,所以才会有这样的问题,想找个方法让子设备拿公网 IP
yyy134341
3 天前
@life90 #13
PPPoE 是运营商提供的方法,不是我部署的服务。就跟普通家宽一样,拨一个号能拿到一个 public IP ,多拨多拿,这样就能形成一个公网地址池,有没有方法将这些公网 IP 以 DHCP 分配给下面设备而已
life90
3 天前
@yyy134341 dhcp 不是你控制的不太可能通过你的 pppoe 去分配,除非你另建地址池。到是地址池可以跟运营商一致。前提你知道他的地址池信息。
jayhuang0044
3 天前
@yyy134341 #17
不说分配线路的问题?
应该有多个 PPPoE 了吧
PPPoE A - A 设备
PPPoE B - B 设备
............................

想分配 和固定进出口?
yyy134341
3 天前
@jayhuang0044 #19
对 可以理解是有多个 pppoe client ,但主要需求是子设备拿公网 IP

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1157416

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX