zoukankan      html  css  js  c++  java
  • WAN Ethernet : DHCP/Static/PPPoE

    以太网接口可以分为IP模式和桥接模式,在IP模式下就得先有一个IP地址,以太网接口获取IP地址的方法,我知道的有三种:StaticDHCPPPPoE。如下例子中使用的eth4WAN Ethernet的接口名字

    Static

    • 通过ifconfig命令配置接口的IP地址192.168.88.15/24、网关地址192.168.88.1DNS地址1.1.1.2,1.1.1.7MAC地址F6:D9:53:7B:C4:1DMTU1490

    ifconfig eth4 0.0.0.0

    ifconfig eth4 down

    ifconfig eth4 mtu 1490

    ifconfig eth4 hw ether F6:D9:53:7B:C4:1D

    ifconfig eth4 192.168.88.15 netmask 255.255.255.0

    ifconfig eth4 up

    • 写入DNS值到文件/etc/resolv.conf

    # cat /etc/resolv.conf

    nameserver 1.1.1.2

    nameserver 1.1.1.7

    • 添加route网络

    route del -net 192.168.88.0 netmask 255.255.255.0 eth4

    route add -net 192.168.88.0 netmask 255.255.255.0 eth4

    • 如果以eth4作为默认路由,则为它建立默认路由规则

    route del default gw 192.168.88.1 dev eth4

    route add default gw 192.168.88.1 dev eth4

    • 启动dns relay相关进程dnsmasq,配置中br0LAN Ethernet,而listen-address是指br0IP地址。

    # dnsmasq -C /var/dnsmasq.conf

    # cat /var/dnsmasq.conf

    no-resolv

    no-dhcp-interface=br0

    listen-address=192.168.1.1

    server=1.1.1.2

    server=1.1.1.7

    DHCP

    以太网接口可以通过busybox自带的udhcpc进程获取动态IP地址,其框架是:可执行文件udhcpc、脚本文件/etc/default.scriptDNS配置文件/etc/resolv.conf

    • udhcpc的部分参数说明
    -i,--interface IFACE    Interface to use (default eth0)
    -p,--pidfile FILE       Create pidfile
    -s,--script PROG      Run PROG at DHCP events (default /etc/default.script)
    • 脚本/etc/default.script的内容大致如下
     1 #!/bin/sh
     2 # udhcpc script edited by Tim Riker <Tim@Rikers.org>
     3 [ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
     4 RESOLV_CONF="/etc/resolv.conf"
     5 [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
     6 [ -n "$subnet" ] && NETMASK="netmask $subnet"
     7 case "$1" in
     8     deconfig)
     9         if [ $? -eq 0 ]; then
    10             /sbin/ifconfig $interface up
    11         fi
    12         if [ $? -eq 0 ]; then
    13             /sbin/ifconfig $interface 0.0.0.0
    14         fi;;
    15     renew|bound)
    16         /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
    17         if [ -n "$router" ] ; then
    18             echo "deleting routers"
    19             while route del default gw 0.0.0.0 dev $interface ; do
    20                 :
    21             done
    22             for i in $router ; do
    23                 route add default gw $i dev $interface
    24             done
    25         fi
    26         echo -n > $RESOLV_CONF
    27         [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
    28         for i in $dns ; do
    29             echo adding dns $i
    30             echo nameserver $i >> $RESOLV_CONF
    31         done
    32         ;;
    33 esac
    34 exit 0
    View Code
    •  启动udhcpc进程
    busybox udhcpc  -i eth4 -p /var/run/udhcpc.pid -s /etc/default.script
    • 完成上述步骤后,可以看到接口eth4获取到了动态的IP地址,掩码并且把网关配置进了默认路由,把获得到的DNS值写入了dnsmasq会用到的配置文件/etc/resolve.conf
    • 从上面的步骤可以大概之后,udhcpc进程启动后会依次进入脚本default.scriptdefconfigrenew流程,脚本default.script会通过读取udhcpc设置的环境变量,得到动态的IP地址、网关、DNS等信息,并由ifconfig指令在适当的时候建立相应的接口,用route指令在适当的时候建立相关的路由,并把获取到的DNS值写入配置文件/etc/resolve.conf
    • 用同Static一样的方式去启动dns relay相关进程dnsmasq

    PPPoE

    PPPoE是同DHCP一样通过获取动态IP地址的一种协议,个人人为最大的不同之处在于PPPoE需要认证,即客户端需要向Server提供正确的用户名和密码才可以获得Server分配的IP地址、网关、掩码、DNS值等信息,而DHCP是不需要认证的,任何以太网接口都可以向处于同一局域网的Server请求分配动态IP地址。

    • 相关脚本和配置文件
    # ls -l /etc/ppp/
    -rwxr-xr-x    1 root     root          1094 Jan  1 00:01 ip-down
    -rwxr-xr-x    1 root     root          1611 Jan  1 00:01 ip-up
    -rw-r--r--    1 root     root           400 Jan  1 00:01 options.1
    -rwxr-xr-x    1 root     root          1623 Jan  1 00:01 ppp-status
    -rw-r--r--    1 root     root            20 Jan  1 00:36 resolv.conf.1
    • pppd启动用到的配置文件内容
    # cat /etc/ppp/options.1 
    noauth nodetach
    lcp-echo-failure 1
    lcp-echo-interval 30
    lcp-echo-failure-2 6
    lcp-echo-interval-2 6
    lcp-timeout-1 10
    lcp-timeout-2 10
    ipcp-accept-remote ipcp-accept-local
    mtu 1480
    linkname 1
    ipparam 1
    xmlpath InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.1.
    refuse-eap
    user test
    password test
    persist
    holdoff 30
    usepeerdns
    noipdefault
    kpppoe pppoe_device eth4
    req_name ppp1
    • 启动pppd进程
    pppd file /etc/ppp/options.1
    • udhcpc类似地,在pppd启动后的各个协议阶段中会分别调用脚本,另外和udhcpc建立接口的方式不同的是,ppp1接口的建立和/etc/ppp/resolv.conf.1文件内容更新是在pppd进程内部完成的,并不是用外面的shell脚本来实现。
    启动pppd后,pppd在内部会分阶段调用如下脚本:
    /etc/ppp/ppp-status "1" "ERROR_NONE" "0" "0" “$xmlpath”
    /etc/ppp/ppp-status "1" "mainloop" "0" "0" “$xmlpath”
    /etc/ppp/ppp-status "1" "connecting" "0" "0" “$xmlpath”
    /etc/ppp/ppp-status "1" "authSucceeded:MS-CHAPV2" "8960" "1480" “$xmlpath”
    /etc/ppp/ppp-status "1" "connected" "8960" "1480" “$xmlpath”
    /etc/ppp/ip-up 'ppp1' 'eth4' '0' '10.0.0.15' '10.0.0.16' '1' “$xmlpath”
    退出pppd后,pppd在内部会分阶段调用如下脚本:
    /etc/ppp/ip-down 'ppp1' 'eth4' '0' '10.0.0.16' '10.0.0.15' '1' “$xmlpath”
    /etc/ppp/ppp-status "1" "disconnecting" "10240" "1492" “$xmlpath”
    /etc/ppp/ppp-status "1" "disconnected" "10240" "1492" “$xmlpath”
    /etc/ppp/ppp-status "1" "cleanup" "10240" "1492" “$xmlpath”

    走到流程/etc/ppp/ip-up的时候,该shell脚本一般应该建立路由规则,更新/etc/resolve.conf启动DNS Relay相关进程dnsmasq,建立跟ppp1接口相关的iptables规则。

    走到流程/etc/ppp/ip-down的时候,该shell脚本一般是删除相应路由规则,停止DNS Relay相关进程等,清除跟ppp1接口相关的iptables规则。

  • 相关阅读:
    C++入门经典-例5.19-指针的引用与传递参数
    C++入门经典-例5.18-通过引用交换数值
    C++入门经典-例5.17-右值引用的定义
    C++入门经典-例5.16-输出引用
    C++入门经典-例5.15-回收动态内存的一般处理步骤
    C++入门经典-例5.14-丢失的内存,关于内存泄漏
    C++入门经典-例5.13-内存安全,被销毁的内存
    C++入门经典-例5.12-动态内存的销毁
    C++入门经典-例5.11-动态分配空间,堆与栈
    C++入门经典-例5.10-指针作为返回值
  • 原文地址:https://www.cnblogs.com/aimmiao/p/13600442.html
Copyright © 2011-2022 走看看