利用支持 LEDE 的路由器 + shadowsocks + iptables6 组建 nat6 + 透明代理 AP 接着搞大新闻…… 😂

所以 LEDE 又是个啥?😂

Linux嵌入式开发环境项目(Linux Embedded Development Environment,LEDE), 是OpenWRT专案的一个分支专案,继承原来OpenWRT的开发目标。 OpenWRT开发者社区内因各种决定迟迟未能在达成一致意见,导致长时间没有大幅更新, 这使得一群OpenWRT核心贡献者感到不满,而他们于2016年5月,决定另立新专案。 这个专案在一年后才正式定名为LEDE。LEDE的内核原始码基本继承自原OpenWRT, 但相应的开发者社区采用新的讨论规定和决议流程。 2017年6月,LEDE社区和OpwnWRT社区均通过决定,将原OpenWRT专案合并至LEDE专案之中。

https://lede-project.org

最后的效果大概是?

  • 连接到路由器的设备可以访问纯 IPv6 网站(通过 nat6)
  • 通过透明代理访问被墙网站

下载,安装和设置 LEDE

如果自己编译的话,可以考虑添加这些依赖(然而咱忘了都在哪了 😂):

libgcc  # LEDE:target/cpu型号/package目录下
libpthread # 同上
libpcre # package
libev # package
libsodium # package 最新版本需要libsodium版本 >= 1.0.12
libmbedtls # package
libcares
ip # base
ipset
iptables-mod-tproxy # 代理 UDP 流量需要
# nat6 需要这两个
ip6tables
kmod-ipt-nat6

刷入以后 ssh 上去(一般是 root@192.168.1.1 ),设置一下密码。


如果要用透明代理的话,没编译的话去装依赖啦 😂:

# opkg 是一个小型的软件包管理器 😂

opkg install ip-full ipset iptables-mod-tproxy libev libpthread libpcre libmbedtls

接下来下载软件,注意需要根据自己的CPU内核架构来进行选择。可使用如下命令查看架构类型:

opkg print-architecture

然后去 http://openwrt-dist.sourceforge.net/packages/LEDE/ 下载些 ipk:

libcares_x.xx-x_xxxx.ipk
libsodium_x.x.xx-x_xxxx.ipk
shadowsocks-libev_x.x.x-x_xxxx.ipk
dns-forwarder_x.x.x-x_xxxx.ipk
ChinaDNS_x.x.x-x_xxxx.ipk
luci-app-shadowsocks_x.x.x-x_all.ipk
luci-app-chinadns_x.x.x-x_all.ipk
luci-app-dns-forwarder_x.x.x-x_all.ipk

将下载的包通过sftp之类的工具上传至路由器的 /tmp 目录。(可能需要安装 openssh-sftpserver)

最后就是安装啦:

opkg install libcares*.ipk libsodium*.ipk
opkg install shadowsocks-libev*.ipk luci-app-shadowsocks*.ipk
opkg install ChinaDNS*.ipk luci-app-chinadns*.ipk
opkg install dns-forwarder*.ipk luci-app-dns-forwarder*.ipk

设置 iptables6

需要准备个自己上手的编辑器 😂 LEDE 内置的是 vi,喜欢 vim/nano 的话可以通过 opkg 安装或者编译时加上。
  • 修改 /etc/config/network , 加上或者修改这一段(ULA前缀):

    NAT6转换的ULA网段要求是2fff::/64网段,因此把ULA前缀改为2fff::/64内的任意网段, 为了让客户端尽可能使用 IPv6 需要修改这个 😂

config globals 'globals'
        option ula_prefix '2fff::/64'
  • 修改 /etc/config/dhcp 在 LAN 接口上启用宣告默认路由:
config dhcp 'lan'
    option ra_default '1'
  • 然后查看一下默认网关:

    ip -6 route | grep "default from"

    大概会得到这样的

    default from (ipv6 range) via (gateway) dev (intf) proto static metric 512

    就需要向下一级宣告默认网关,括号的内容自行替换为上面结果。

    ip -6 r add default via (gateway) dev (intf)

    比如咱的结果是这样:

    default from 2001:da8:a005:218::/64 via fe80::72ba:efff:fe82:c654 dev eth1 metric 512

    那咱就这么写:

    ip -6 r add default via fe80::72ba:efff:fe82:c654 dev eth1

  • 用 ip6tables 设置 NAT

    ip6tables -t nat -A POSTROUTING -o (intf) -j MASQUERADE

    记得把 intf 换成相应的界面名称(例如咱的eth1),然后拿起连接到这个网络的设备 试一下 IPv6 能不能用了呗~

  • 最后可以考虑写个脚本自动化这个过程 (其实咱是抄的 😂) :

#!/bin/sh
# filename: /etc/hotplug.d/iface/90-ipv6
# please make sure this file has permission 644

# check if it is the intf which has a public ipv6 address like "2001:da8:100d:aaaa:485c::1/64"
# interface_pulbic 是带有公网IPV6地址的接口地址,大多数情况下是 wan6
interface_public="wan6"
[ "$INTERFACE" = "$interface_public" ] || exit 0

res=`ip -6 route | grep "default from"`
gateway=`echo $res | awk '{print $5}'`
interface=`echo $res | awk '{print $7}'`

if [ "$ACTION" = ifup ]; then
    ip -6 r add default via $gateway dev $interface
    if !(ip6tables-save -t nat | grep -q "v6NAT"); then
        ip6tables -t nat -A POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
    fi
else
    ip6tables -t nat -D POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
    ip -6 r del default via $gateway dev $interface
fi

把这个脚本放进 /etc/hotplug.d/iface/90-ipv6 ,设置好权限(例如644), 效果就是每次ipv6连接和断开就自动添加和删除路由规则 😂

设置 Shadowsocks

😂 嗯……

用 Luci 设置(和需要更多设置)的话请参考最后参考来源那篇文章 (咱要求低到能用就行 😂)

打开或修改 /etc/config/shadowsocks

# 基本设置
config general
    # 启动延迟
    option startup_delay '0'

# 透明代理设置
config transparent_proxy
    # UDP 中继服务器是哪个,没有的话就是 nil
    # 然而内部用的啥名字咱没看明白 😂 于是还是用 Luci 改了
    option udp_relay_server 'nil'
    # 透明代理的本地端口和 mtu
    option local_port '1234'
    option mtu '1492'
    list main_server 'cfg104a8f'
    list main_server 'cfg0c4a8f'

# 设置 socks5 代理
config socks5_proxy
    list server 'nil'
    option local_port '1080'
    option mtu '1492'

# 设置端口转发
config port_forward
    list server 'nil'
    option local_port '5300'
    option destination '8.8.4.4:53'
    option mtu '1492'

# 访问控制
config access_control
    # 路由器自身的代理类型 (1 好像是普通代理)
    option self_proxy '1'
    # 直连地址列表
    option wan_bp_list '/etc/chinadns_chnroute.txt'
    # 强制使用代理的 IP 地址列表,一行一个。
    list wan_fw_ips '8.8.8.8'
    list wan_fw_ips '8.8.4.4'
    option lan_target 'SS_SPEC_WAN_AC'
    # 强制直连的 IP 地址列表,一行一个。
    list wan_bp_ips '59.67.0.0/9'
    list wan_bp_ips '172.18.0.0/9'

# 设置服务器(和 Shadowsocks 客户端一样)
config servers
    option alias 'example'
    option fast_open '1'
    option no_delay '0'
    option server 'ip_address'
    option server_port '80'
    option timeout '60'
    option password 'password'
    option encrypt_method 'aes-256-cfb'
    option plugin 'obfs-local'
    option plugin_opts ''

设置 DNS-forwarder

把 DNS 请求转发给特定的端口~

创建或修改 /etc/network/dns-forwarder :

config dns-forwarder
    # 上游 DNS 服务器
    option dns_servers '8.8.8.8'
    # 开不开 😂
    option enable '1'
    # 本地的地址和端口
    option listen_port '5311'
    option listen_addr '127.0.0.1'

创建或修改 /etc/network/chaindns :

通过比较国内和国外 DNS 解析的差别区分是不是国内网站~
config chinadns
    # 国内路由表的位置
    option chnroute '/etc/chinadns_chnroute.txt'
    # ChinaDNS 的端口(和上面的 DNS 转发要不一样)
    option port '5353'
    # 开不开 😂
    option enable '1'
    # 双向过滤 😂
    option bidirectional '1'
    # 上游服务器,第一个是汝 ISP 的DNS(
    option server '0.0.0.0,127.0.0.1#5311'

修改 /etc/network/dhcp :

config dnsmasq
    # 加一行 ChinaDNS 的服务器:
    list server '127.0.0.1#5353'

然后重启路由器应该就 OK (😂


keyboard_arrow_left 上一篇文章: 常见的双因素验证类型 keyboard_arrow_right 下一篇文章: 如何在 IRC 上请求支援

想要表达对咱的支持的话,汝可以:

需要 JavaScript 支持来使用 Isso 😂