Linux Ubuntu系统之PPP拨号经验分享

Linux Ubuntu系统之PPP拨号经验分享,第1张

pppd 拨号模块,Linux系统是自带的, 就像windows下自带的RAS拨号一样,打印机等很多应用需要通过拨号方式进行通信的。

参考文档,配置4个文件:

这个事情,给我很大的启示: 不要做战略的矮子,再勤劳的执行力, 团队的效率也上不来的。

上网搜索,多亏google,很快就明白了,SSH通过22端口,开启了一个“session”,一般,如你执行 python3 main.py,随着SSH Session结束,Linux会kill这个process的。 而这个PPP拨号程序需要作为一个长时间运行的,故需要用 nohup 和 & 关键字,这样当你退出ssh,这个程序会驻留系统。

那么问题来了,查询运行的process,常用的 ps all就是不灵了。

要用ps ax | grep py 才可以。

rfc1661

protocols,所在文件main.c中初始化,记录ppp数据链路层的协议列表。

有这几种动作和触发状态变迁的事件:

  Events                                  Actions

  Up  = lower layer is Up                tlu = This-Layer-Up

  Down = lower layer is Down              tld = This-Layer-Down

  Open = administrative Open              tls = This-Layer-Started

  Close= administrative Close              tlf = This-Layer-Finished

  TO+  = Timeout with counter >0          irc = Initialize-Restart-Count

  TO-  = Timeout with counter expired      zrc = Zero-Restart-Count

  RCR+ = Receive-Configure-Request (Good)  scr = Send-Configure-Request

  RCR- = Receive-Configure-Request (Bad)

  RCA  = Receive-Configure-Ack            sca = Send-Configure-Ack

  RCN  = Receive-Configure-Nak/Rej        scn = Send-Configure-Nak/Rej

  RTR  = Receive-Terminate-Request        str = Send-Terminate-Request

  RTA  = Receive-Terminate-Ack            sta = Send-Terminate-Ack

  RUC  = Receive-Unknown-Code              scj = Send-Code-Reject

  RXJ+ = Receive-Code-Reject (permitted)

      or Receive-Protocol-Reject

  RXJ- = Receive-Code-Reject (catastrophic)

      or Receive-Protocol-Reject

  RXR  = Receive-Echo-Request              ser = Send-Echo-Reply

      or Receive-Echo-Reply

      or Receive-Discard-Request

每个协议的状态机如下:

      | State

      |    0        1        2        3        4        5

Events| Initial  Starting  Closed    Stopped  Closing  Stopping

------+-----------------------------------------------------------

Up  |    2    irc,scr/6    -        -        -        -

Down |    -        -        0      tls/1      0        1

Open |  tls/1      1    irc,scr/6    3r        5r        5r

Close|    0      tlf/0      2        2        4        4

      |

  TO+ |    -        -        -        -      str/4    str/5

  TO- |    -        -        -        -      tlf/2    tlf/3

      |

RCR+ |    -        -      sta/2 irc,scr,sca/8  4        5

RCR- |    -        -      sta/2 irc,scr,scn/6  4        5

RCA  |    -        -      sta/2    sta/3      4        5

RCN  |    -        -      sta/2    sta/3      4        5

      |

RTR  |    -        -      sta/2    sta/3    sta/4    sta/5

RTA  |    -        -        2        3      tlf/2    tlf/3

      |

RUC  |    -        -      scj/2    scj/3    scj/4    scj/5

RXJ+ |    -        -        2        3        4        5

RXJ- |    -        -      tlf/2    tlf/3    tlf/2    tlf/3

      |

RXR  |    -        -        2        3        4        5

      | State

      |    6        7        8          9

Events| Req-Sent  Ack-Rcvd  Ack-Sent    Opened

------+-----------------------------------------

Up  |    -        -        -          -

Down |    1        1        1        tld/1

Open |    6        7        8          9r

Close|irc,str/4 irc,str/4 irc,str/4 tld,irc,str/4

      |

  TO+ |  scr/6    scr/6    scr/8        -

  TO- |  tlf/3p    tlf/3p    tlf/3p        -

      |

RCR+ |  sca/8  sca,tlu/9  sca/8  tld,scr,sca/8

RCR- |  scn/6    scn/7    scn/6  tld,scr,scn/6

RCA  |  irc/7    scr/6x  irc,tlu/9  tld,scr/6x

RCN  |irc,scr/6  scr/6x  irc,scr/8  tld,scr/6x

      |

RTR  |  sta/6    sta/6    sta/6  tld,zrc,sta/5

RTA  |    6        6        8      tld,scr/6

      |

RUC  |  scj/6    scj/7    scj/8      scj/9

RXJ+ |    6        6        8          9

RXJ- |  tlf/3    tlf/3    tlf/3  tld,irc,str/5

      |

RXR  |    6        7        8        ser/9

1)PPPD进程运行过程中呈Dead状态

有时在linux上使用ps看,PPPD进程状态是‘D’。释放ppp设备时没有清理干净,下一次再创建 socket时失败,让进程进入到'D'。

2)pppd中创建了几个套接字,分别用于什么作用;

3)删除这些套接字,删除成功的条件是什么;

4)在进程退出时,什么时候会退出失败;

5)如果失败了,进程是什么状态;

https://fossies.org/linux/misc/ppp-2.4.7.tar.gz/ppp-2.4.7/pppd/pppd.8

3.ppp kernel

channel

                                    ppp_xmit_process ->__ppp_xmit_process ->ppp_send_frame

ppp_channel_push - >__ppp_channel_push->

http://blog.sina.com.cn/s/blog_a44094ea0102wx3x.html

我按下面这个配置成功了,你可以试下:

一、安装的前提条件

1.确保安装了网卡并工作正常

使用命令

#ifconfig eth0

查看网卡状态,然后关闭ifdown eth0,注意一定要关闭ifdown eth0

2.在系统中不要设置默认路由(网关),让ADSL拨号后自动获得

如果已经设置了默认路由,使用以下方法删除:

在文件 /etc/sysconfig/network 中删除 GATEWAY= 这一行,然后以root执行:

#/etc/rc.d/init.d/network restart

3.已经安装了pppd软件包

如果存在文件 /usr/sbin/pppd,则说明已经安装了pppd

如果未安装,从RedHatLinux 6.2安装光盘上安装ppp-2.3.11-

4.i386.rpm这个软件包

二、安装PPPOE客户端软件

Linux下的PPPOE客户端软件比较多,而且大多使用GNU License,我们推荐使用rp-pppoe 这个软件包。从http://www.roaringpenguin.com/pppoe/这个网站上,不仅可以下载

RedHat 62平台下的rp-pppoe的二进制软件包,而且可以下载源代码软件包。

1.二进制软件包的安装:

A.下载二进制软件包

http://www.roaringpenguin.com/pppoe/rp-pppoe-3.2-1.i386.rpm

B.进行安装

以root执行:

#rpm -Uvh rp-pppoe-3.2-1.i386.rpm

2.从源代码进行安装:

从源代码进行安装同样适用于其它平台的Linux,但必须在Linux系统中安装gcc编译器。

A.下载源代码软件包

http://www.roaringpenguin.com/pppoe/rp-pppoe-3.2.tar.gz

B.解压缩

#tar xvfz rp-pppoe-3.2.tar.gz

#cd rp-pppoe-3.2

C.进行编译和安装

运行脚本

#./go

将自动进行编译和安装,最后,调用/usr/sbin/adsl-setup进行配置,具体解释见三。

三、配置PPPOE客户端软件

安装完软件包后,必须配置pppoe的配置文件/etc/ppp/pppoe.conf,从而让ADSL拨号时使用配置文件中的用户名、密码等参数。我们不必手工改动这个文件,可以使用adsl-setup这个工具进行配置:

#/usr/sbin/adsl-setup

当出现

>>>Enter your PPPoE user name :

输入ADSL帐号的用户名

当出现

>>>Enter the Ethernet interface connected to the ADSL modem

For Solaris, this is likely to be something like /dev/hme0.

For Linux, it will be ethn, where 'n' is a number.

(default eth0):

输入 eth0 ,这是ADSL相连的网卡的名字

当出现

>>>Enter the demand value (default no):

输入 no

当出现

>>>Enter the DNS information here:

输入 server ,这表示使用ADSL拨号自动获得的DNS服务器IP地址

当出现

>>>Please enter your PPPoE password:

输入ADSL帐号的密码

当出现

>>>Choose a type of firewall (0-2):

输入 0 ,不使用防火墙

当出现

>>>Accept these settings and adjust configuration files (y/n)?

如果输入的信息正确,输入 y ,完成配置,否则,输入 n 重新输入。

四、启动PPPOE客户端软件

使用命令

/usr/sbin/adsl-start 启动PPPOE客户端软件,进行连接,如果成功,将出现

Connected

如果不成功,请检查网线、ADSL MODEM等物理设备,并查看 /var/log/messages中的信息

/usr/sbin/adsl-stop 关闭和ISP的连接

/usr/sbin/adsl-status 查看当前连接的状态

如果想在Linux系统启动时自动启动ADSL连接,输入以下命令

#chkconfig --add adsl

将在当前的运行级下加入ADSL的自启动脚本

五、测试

当连接成功后,使用命令

#ifconfig -a

在输出中应该含有关于 ppp0 的一堆信息,其中还绑定了 IP 地址,说明已经从拨号中获得了IP地址。

使用命令

#netstat -nr

查看路由表信息,这时的默认路由应该是上面获得的IP地址。

如果没有默认路由,我们可以手动增加:

#route add default gw 上面获得的IP地址

使用命令

#nslookup www.sina.com.cn

如果解析出新浪的IP,说明已经从拨号中正确获得了DNS服务器

最后,使用命令ping某个域名或IP,如果有响应,表示你已经大功告成了。

六、其它说明

1、RedHat Linux 7.1已经集成了rp-pppoe这个软件包,只不过版本有些低,如果你不在意版本高低,可以直接进行三后面的步骤。

2、以后要拔号上网时,只要:

ifdown eth0

ifup ppp0

/usr/sbin/adsl-start


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6201109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存