菜鸡路由器拼装之路(2):PPPoE+科学上网及Dashboard
上一篇文章中,我们已经配置好了一个最基础的网关。然而学校情况比较特殊,需要我们PPPoE上网。此外,我还有一个可以科学上网的虚拟专用网连接资源,也希望配置到路由器上。另外,为了让资源访问更方便,我还要建立一个Dashboard。这篇文章我们就来完成这个操作。
PPPoE上网
上一篇文章中,我们决定将VLAN做如下规划:
- eth0.100 与wlan1lan桥接,局域网
- eth0.200 外网PPPoE
- eth0.300 外网DHCP(暂时不做配置)
现在就来配置eth0.200。用apt
安装好pppoe
这个包之后,我们用这条命令来探测一下当前网内有哪些提供商:
root@router ~ # pppoe -I eth0.200 -A
Access-Concentrator: PPPOE_01-AC
AC-Ethernet-Address: da:3e:79:8f:cf:d0
接下来就可以写PPPoE的配置了。在/etc/ppp/peers/
下新建一个名称为PPPOE_01-AC
的文件,写入如下配置:
plugin rp-pppoe.so # PPPoE插件
eth0.200 # 网络端口
#defaultroute # 不要让他添加默认路由。一会我们自己还要修改
#connect /bin/true
+ipv6 # 启用IPv6
接下来,我们用下面这个命令,测试一下网络是否正常:
ip link set dev eth0.200 up
poff PPPOE_01-AC
pon PPPOE_01-AC user <username> password <password>
如果一切正常的话,通过ip addr
,你应该可以看到你已经被分配到了一个IPv4和IPv6地址。如果你再手动添加一条默认路由,就可以上网了。
接下来,我们配置一下防火墙。在/etc/ppp/ip-up.d/
下放一个0001pppoe_ipv4_start
,并加上执行权限,这样这个文件会在建立IPCP链路之后被执行。我的习惯是在/root/scripts/
下建立这个文件,然后做一个软链接。文件的内容是这样的:
#!/bin/bash
# Import scripts
SCRIPT_ROOT=/root/scripts
source $SCRIPT_ROOT/iptables_helper
#echo Interface: $1 > /dev/kmsg
#echo Local IP: $4 > /dev/kmsg
#echo Remote IP: $5 > /dev/kmsg
# Add default route
ip route add default dev $1 via $5
# Base rules
iptables_init
# Create zones
iptables_zone_create Wan
iptables_zone_create Lan
iptables_zone_member_add Wan $1
iptables_zone_member_add Lan br0
iptables -A ZoneLanInput -j ACCEPT
iptables -A ZoneLanForward -j ACCEPT
iptables -t nat -A ZoneWanPostrouting -j MASQUERADE
# fix mss problems
iptables -t mangle -X
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
再执行一次poff
和pon
。现在所有客户端应该可以正常上网了。如果不能上网,看看你的eth0.200
有没有up。没有up也不要紧,先手动搞定他,一会再细处理。
科学上网
自古以来,我国勤劳而坚韧的劳动人民,就学会了如何科学的进行互联网傲游工作。我们作为后来人,自然也不能免俗。首先安装工具vpnc
。之后直接去编辑/etc/vpnc/default.conf
:
IPSec ID warispeace
IPSec secret freedomisslavery
Xauth username Ignoranceisstrength
Xauth password bigbrotherlonglive
然后我们拨一下试试:
vpnc --debug 0 --gateway 1984.gov.cn && curl -nv4L www.google.com
如果内容正常,说明加速器工作也是正常的。那么我们就可以进行下面的工作了
进一步科学上网
建立一个network_pppoe_boot.sh
,写入:
#!/bin/bash
SCRIPT_ROOT=/root/scripts
source $SCRIPT_ROOT/iptables_helper
# Dial network
echo Dialing...
ip link set dev eth0.200 up #还记得之前说要先up吗?这里我们搞定了
poff PPPOE_01-AC
pon PPPOE_01-AC user <username> password <password>
# Wait until network being connected...
until curl neverssl.com > /dev/null 2>&1
do
sleep 1
done
curl neverssl.com > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo ***NETWORK BAD!***
exit 1
fi
# generate our route table
table_number=451
table_source="$SCRIPT_ROOT/chnip_list.txt" # Where can I get it? visit ipip.net if u like!
table_target="ppp0" # 有点丑陋,不过先这样吧
# Flush old items first
echo Route table flushing...
ip route flush table $table_number
echo Route table adding...
while read table_item; do
ip route add $table_item dev $table_target table $table_number
done < $table_source
ip route add 10.0.0.0/8 dev $table_target table $table_number
ip route add 172.16.0.0/12 dev $table_target table $table_number
# and items didnot added will be fallback to main route table, which is what we want
# Time to dial VPN at now
echo Dialing VPN...
vpnc --debug 0 --gateway 1984.gov.cn
iptables_zone_member_add Wan tun0
echo Modifying Route rule...
ip rule add from all table $table_number
echo Testing now...Should show a good result
curl school_internal.site -I
echo Testing now...Should show a foreign ip
curl ifconfig.co
IP列表的来源是多种多样的。我建议,在不影响正常使用的前提下,可以适当降低路由表的精度,从而减少硬件压力。
检查后执行脚本,稍等片刻,直到脚本执行结束,如果一切正常,你应该可以在任一台客户端上访问国内外所有站点,并保持正常的身份了。
Dashboard搭建
Netdata是个好东西,安装也很方便,装好后可以按照官方Wiki中的优化指南做一些设置。
跑起来后,我们立刻就能发现,CPU0接收的中断有点多:
很容易就能发现,实际是eth0的中断占了大头。想想也难免,eth0同时承担者WAN和LAN的接口任务,负载大也很正常:
所以我们就手动做一下负载的分配:
echo 2 > /proc/irq/$(grep eth0 /proc/interrupts| cut -f 1 -d \: )/smp_affinity
现在再来看一下:
嗯,明显好了很多。
现在我们可以更新一下rc.local
了:
echo Modifying IRQ of eth0 to CPU1 > /dev/kmsg
echo 2 > /proc/irq/$(grep eth0 /proc/interrupts| cut -f 1 -d \: )/smp_affinity
echo Modified. > /dev/kmsg
echo default-on > /sys/class/leds/green:ph24:led1/trigger
echo Getting ready to run PPPoE CONNECTION settings now! > /dev/kmsg
bash /root/scripts/network_pppoe_boot.sh > /dev/kmsg
echo mmc0 > /sys/class/leds/green:ph24:led1/trigger
service netdata start
exit 0
以上我们已经完成了一个基本可用的科学网关的配置。接下来的几篇文章,我会试图实现以下几个目标:
PPPoE接入互联网VPN接入国外网络以及流量区分网络和运行状态监视(via HTTP)- LAN中的IPv6访问
- 启动中关闭LAN交换机
- 启动时更改WAN接入方式,以及运行状态监视(via LCD)
- 备用电源供应,RTC时钟和交换机配置保存