如何让 pppd 在命名空间内创建 ppp0?

如何让 pppd 在命名空间内创建 ppp0?

我有一个简单的 pppoe 连接,工作正常。一个简单的

# pon my-isp

创建一个ppp0设备。

我定义了一个命名空间,例如

ip netns add physical

但是之后

ip netns exec physical pon my-isp

ppp0既不在全局命名空间中也不在命名空间中创建physical

如何在提到的命名空间内获取 ppp0?

答案1

想法:

1) 让我们pon在默认命名空间中创建设备,然后将其移动到physical.编写流程脚本。

2)pon只是一个脚本,如果你看一下,它会调用pppd.复制脚本,修改它以便它用于netns exec调用pppd.看看是否能解决问题。正如 Hauke 所说,您需要命名空间中的 PPPoE 设备。 veth 对可能是必需的,也可能不是必需的,具体取决于您想要对命名空间执行的操作。

编辑

我不知道您的确切设置(描述中缺少所有 ppp 和 pppoe 配置文件),因此我尝试了一种通过 PPPoE 连接两个命名空间的简化设置。正如预期的那样,pppd从命名空间开始会使ppp0设备出现在该命名空间中,所以我真的不知道您的配置出了什么问题。

测试以下内容(以 root 身份):

ip netns add ns1
ip netns add ns2
ip link add veth1 type veth peer name veth2
ip link set veth1 addr 52:54:00:00:00:01
ip link set veth2 addr 52:54:00:00:00:02
ip link set veth1 netns ns1
ip link set veth2 netns ns2
ip -n ns1 link set lo up
ip -n ns1 link set veth1 up
ip -n ns2 link set lo up
ip -n ns2 link set veth2 up    
ip netns exec ns1 pppd pty '/usr/sbin/pppoe -I veth1 -e 1:52:54:00:00:00:02 -m 1412' noaccomp nopcomp asyncmap 000a0008 noauth nocrtscts xonxoff local maxfail 0 192.168.36.1:192.168.36.2
ip netns exec ns2 pppd pty '/usr/sbin/pppoe -I veth2 -e 1:52:54:00:00:00:01 -m 1412' noaccomp nopcomp asyncmap 000a0008 noauth nocrtscts xonxoff local maxfail 0 192.168.36.2:192.168.36.1

现在xterms以 user 身份在命名空间中启动两个username,这样您就可以查看配置、测试ping等(我喜欢为此设置彩色背景,所以我知道哪个是哪个):

ip netns exec ns1 su -c "xterm -bg yellow &" username
ip netns exec ns2 su -c "xterm -bg lime &" username

如果有效,则说明您的 PPPoE 脚本设置方式存在问题。如果它不起作用,那就是其他地方出了问题。

相关内容