我有一个简单的 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 脚本设置方式存在问题。如果它不起作用,那就是其他地方出了问题。