本教程为@duckNet佬的nftables转发教程的面向小白的 Lala特化 版(原教程链接)
本人水平不高,如有错误,还请提出
第一步:VNC配置路由
这段具体参考官方教程(地址官网有)
等待IEPL开机后(可能需要等待较长时间),进入控制台,安装系统
点击VNC按钮进入VNC,root登录,密码见邮箱
在官方教程中,根据自己买的机器,输入不同命令,以联通520为例:
echo "101 CU" >> /etc/iproute2/rt_tables
ip route add default via 192.168.5.1 dev eth0 table CU
ip rule add from 192.168.5.XX table CU
如果配置无误,就可以通过邮箱内的IP和端口,用自己的SSH工具本地连接操作了
第二步:nftables配置
在
控制台-网络-可配置的端口
中查看可用端口,然后在想用的端口后面填写相同的端口号(想填别的也行,本教程出于简化操作目的就填一样的了),然后点击右上角的更新
,等待几秒,应该会下图一样,显示出ip:端口。编辑
/etc/nftables.conf
,将文件内原本的所有内容全部删除,替换成如下内容 (根据自己需要删改)
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
# 这三个链条如果你懂就可以动,不然就不动。
chain input {
type filter hook input priority filter;
}
chain forward {
type filter hook forward priority filter;
}
chain output {
type filter hook output priority filter;
}
# 首先处理 dnat
chain port-dnat {
type nat hook prerouting priority dstnat;policy accept;
ip protocol { tcp,udp } th dport 这里写Lala入站端口(例如: 50065) counter dnat to 这里写落地ip端口(例如: 12.34.56.01:9012)
ip protocol { tcp,udp } th dport 这里写Lala入站端口(例如: 50066) counter dnat to 这里写落地ip端口(例如: 12.34.56.02:9013)
ip protocol { tcp,udp } th dport 这里写Lala入站端口(例如: 50067) counter dnat to 这里写落地ip端口(例如: 12.34.56.03:9014)
}
set dst-ip {
type ipv4_addr
flags interval
elements = {落地ip(例如: 12.34.56.01),落地ip(例如: 12.34.56.02),落地ip(例如: 12.34.56.03)} # 注意使用英文逗号分开
}
# 再处理 snat
chain port-snat {
type nat hook postrouting priority srcnat;policy accept;
ip daddr @dst-ip masquerade
}
}
保存文件后使之生效
nft -f /etc/nftables.conf
使开机自启
systemctl enable nftables.service
systemctl start nftables.service
可以通过
nft list ruleset
命令查看是否生效
第三步:使用systemd开机自动配置路由
在
/etc/systemd/system/
下创建一个服务单元文件route-auto-configure.service
文件内容 (根据自己需要删改) :
[Unit]
Description=Auto Configure LALA net route set
After=network.target
[Service]
Type=oneshot
# 这里以分号为界限,有五句命令
# 前两句就是官方教程里配置路由的后两句命令,根据机型不同自行修改(这里写的是联通520的命令)
# 后三句是自己的落地,要把我这里的12.34.56.0x修改成你自己的落地ip,后面的CU也是根据机型不同自行修改(联通CU、电信CT、移动CM)
ExecStart=/bin/sh -c "/usr/sbin/ip route add default via 192.168.5.1 dev eth0 table CU;/usr/sbin/ip rule add from 192.168.5.xx table CU;/usr/sbin/ip rule add from 12.34.56.01 lookup CU;/usr/sbin/ip rule add from 12.34.56.02 lookup CU;/usr/sbin/ip rule add from 12.34.56.03 lookup CU"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启用并启动服务
# 重新加载 systemd 配置
systemctl daemon-reload
# 启用开机自启
systemctl enable route-auto-configure.service
# 立即启动服务
systemctl start route-auto-configure.service
# 检查服务状态
systemctl status route-auto-configure.service
# 查看路由表
ip route show
ip rule show
第四步:开启内核转发
#查看内核转发开启情况
sysctl net.ipv4.ip_forward
#临时开启
sysctl -w net.ipv4.ip_forward=1
#永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
到这里,把Lala的ip:端口替换掉落地的ip:端口,如果顺利的话就已经可以连通了,重启后也会自动配置
补充一下 lala这个非对称路由其实没有说详细。
linux路由选择如果有已经存在的socket(可以理解为tcp连接),源ip是根据socket创建的地址的,在lala下面是 192.168.x.x 的地址,但是从lala返回到用户的数据包的地址是一个公网地址 这里用 1.2.3.4 来代替,如果最终地址是1.2.3.4,那么就会匹配默认路由表最终走eth1出去(10.x.x.x的网卡),导致了非对称路由。这就是为什么lala的专线需要配置路由表才能用。
按道理应该走eth0出去的,但是根据路由表匹配,走了eth1出去。
然后我文章中提到的,就是让回来的流量强制走eth0,不走eth1出去,走eth0就可以把数据包返回给国内的用户了。
大家有遇到配置问题的欢迎私聊我
评论区