最近入手了一台刷入OpenWRT的路由器,但校园网需要使用静态地址+L2TP接入,因此配置的过程出现了很多问题,特此记录。
下载L2TP软件包(解决OpenWRT软件包没有自带L2TP导致路由器无法上网)
这个步骤是为了给所有没有预装xl2tpd的(大部分应该没有)路由器安装xl2tpd,它与其他部分不是连续的关系,所以首先要进行这一步。
要配置L2TP首先需要让路由器拥有xl2tpd这个软件包。如果没有也不要紧,我们可以让电脑给路由器共享网络。这个过程需要1台主电脑(同时有有线口和Wi-Fi口),1个辅电脑。接下来按如下步骤接线
1.首先在路由器的 网络–无线 页面保证无线是开启的,如果不是请点击 重启无线 打开。这里可以直接配置自己的无线名字和密码,配好后用手机连接上。
注意,重启无线后可能需要在路由器中执行该命令,原因请参考配置内网部分:ip rule add from all lookup main pref 0
2.在路由器的 网络–接口 页面中修改Wan口,协议改为静态IP,IP地址是 192.168.3.2,子网掩码 255.255.255.0,网关 192.168.3.1,DNS 223.5.5.5,其它留空即可,保存应用。
3.电脑的有线口连接路由器的Wan口,电脑的无线连接其它可以上网的Wi-Fi(不能是一会要使用的手机的热点,否则还需要一个设备)。
4.在电脑的开始菜单搜索 查看网络连接,在弹出的窗口中右击WLAN–属性,在上面点击 共享,首先在下面的下拉框中选择你的有线网卡(一般是 以太网),再勾选 允许其他网络用户通过此计算机的Internet连接来连接。如果弹出任何对话框请确定。
5.在网络连接的窗口右击 以太网–属性,往下找到Internet协议版本4,双击,点击“使用下面的IP地址”,修改地址为192.168.3.1,子网掩码 255.255.255.0,确定即可。
6.现在用另一台设备连接OpenWrt的Wi-Fi(或是连接网线也可以),进入它的后台页面,在 系统–TTYD 中打开终端,输入如下命令:
1
opkg update && opkg install xl2tpd
如果提示错误,请考虑更换软件源。
7.如果安装成功,那么说明已经安装了xl2tpd软件,可以断开连线并在主电脑中取消共享网络了。
配置内网
要配置内网IPv4,首先在OpenWrt后台切换到 网络–接口 页面,同时在右侧的接口列表中修改WAN接口。我们切换协议为静态地址,并填写自己通过其它途径分配好的IP地址和DNS服务器。对于浙大玉泉校区的网络环境来说,需要首先在公寓公众号上申请IP地址,填入路由器的MAC地址(WAN口),并等待1天,第二天就可以ping通网关,从而进行后续的配置。
不出所料的话,目前路由器除了能够ping通内网地址,域名是查找不到的。这是因为很多版本的OpenWrt默认屏蔽了RFC1918,也就是如果对公网域名解析得到的IP是机器所在的内网网段IP(自己的IP在10.0.0.0/8,内网网站也在10.0.0.0/8),就会屏蔽掉这条信息。要解决这个,请在 网络–DHCP/DNS 页中找到RFC1918并取消勾选,保存应用。
此时的现象应该是路由器可以ping通内网地址,不论是域名还是IP。但是可能主机除了能ping通网关,但不能ping通其它地址。这其实是路由表的问题。Linux下有一种称为“策略路由”的高级路由方法,它可以根据不同的策略转发到不同的(最多256个)路由表并执行不同的路由。而从路由器发出的ping和从主机发出的ping默认走的不是同一个路由表,因此出现了上述的问题。我们可以用下面的命令简单地让所有经过路由器的数据都走主路由表,这样我们设置一个路由表就相当于设置所有的路由,在当前的网络情况下是没问题的。
1 | ip rule add from all lookup main pref 0 |
我们最好将这个配置保存起来以便每次开机自动执行。修改/etc/rc.local文件,在前面增加两行:
1 | ip rule add from all lookup main pref 0 |
每次无线网络重启时也需要执行这两句。
现在应该可以在主机上打开校园网内的各网站了。
配置L2TP
配置L2TP的前提是内网畅通并已经安装好了xl2tpd软件包。这里采用内建L2TP连接的方式,如果不行的话可以命令行再行配置。
在路由器后台中打开 网络–接口,添加一个接口,协议选择L2TP,填入地址,用户名,密码,同时选择防火墙区域(可能切换到其它选项卡)为Wan区域(或者有专门的VPN区域则选择那个),最后连接,可能需要重启路由器。
重启后会发现已经连接上了L2TP,并可以正常上网了,这是最好的情况。
如果不能,那么需要查看原因:
- L2TP接口没有IP,没获取到地址:VPN没有启动成功,如果重启不行的话那么可能需要先在命令行中配置,否则可以考虑更换OpenWrt固件
- L2TP接口获取到了IP,但路由器ping不通外网:策略路由问题,执行前述ip rule命令
手动配置L2TP可以参考如下教程:https://atomlab.org/post/code/rpi-router/
附上当时解决L2TP接口没IP的方案:先手动配置,然后修改该接口的物理接口为ppp0,然后重新配置,重启
配置IPv6
中继模式
不得不说OpenWrt对IPv6的支持仍然有待改进,但通过如下的方式可以实现IPv6中继的联网方式:每个设备可以获取公网IP,路由器也有IPv6地址。
1.在 网络–DHCP/DNS 的高级设置中取消勾选禁止解析IPv6 DNS记录。
2.路由器的终端中修改/etc/config/dhcp文件,找到config dhcp ‘lan’,把对应项修改/添加:
1 | option ra 'hybrid' |
找到config dhcp ‘wan’,整个项修改为如下:
1 | config dhcp 'wan6' |
3.重启,应该可以在电脑中获取到IPv6的地址了
NAT模式
由于中继模式的IPv6体验实在太差,经常出现路由被清空导致外网无法访问内网IP的情况(可能是配置问题),我这里目前已经全部改成NAT6上网了。
1.在/etc/config/dhcp
文件中修改config dhcp 'lan'
这一配置项,修改/添加如下内容:
1 | option ra_slaac '1' |
而config dhcp 'wan'
这一项就不需要配置了,可以加一句option ignore '1'
,其它的删掉。
2.这个时候还要确保路由器的IPv6是正常的,在路由器内能正常访问IPv6地址。这里需要执行traceroute 2400:3200::1
命令来查看一下你的默认网关。
3.在 网络-防火墙-自定义规则 中添加如下配置项
1 | ip6tables -t nat -A POSTROUTING -o eth0.1 -j MASQUERADE |
4.重启防火墙,现在应该上不了IPv6了,不过不用担心,只要在路由表中加入如下两项就可以
1 | route -A inet6 add 2000::/3 gw <GATEWAY> |
其中,
这个命令每次启动和重启网络都需要执行。