分类 默认分类 下的文章

Ubuntu 配置为旁路由实现透明代理(Clash)
下面几乎所有操作都需要sudo

开启IP转发
vim /etc/sysctl.conf
去掉net.ipv4.ip_forward=1 这一行的注释,然后执行下面命令启用当前配置

sysctl -p
配置iptables
iptables -t nat -N clash
iptables -t nat -N clash_dns

这个是fake-ip对应的dns地址,一般不用动

iptables -t nat -A PREROUTING -p tcp --dport 53 -d 198.19.0.0/24 -j clash_dns
iptables -t nat -A PREROUTING -p udp --dport 53 -d 198.19.0.0/24 -j clash_dns
iptables -t nat -A PREROUTING -p tcp -j clash

让当前机器成为一个网关服务器

iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

这里需要注意的是,下面两行最后的 192.168.2.101 是当前旁路由的 IP 地址,请根据你自己的实际情况修改

目的DNS端口是后面clash配置里面的5354

iptables -t nat -A clash_dns -p udp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 192.168.2.101:5354
iptables -t nat -A clash_dns -p tcp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 192.168.2.101:5354

绕过一些内网地址,(RETURN 表示退出当前Chain,返回到上一级的Chain继续匹配)

iptables -t nat -A clash -d 0.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 10.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 127.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 169.254.0.0/16 -j RETURN
iptables -t nat -A clash -d 172.16.0.0/12 -j RETURN
iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN
iptables -t nat -A clash -d 224.0.0.0/4 -j RETURN
iptables -t nat -A clash -d 240.0.0.0/4 -j RETURN

注意, 这边的7892对应后续clash配置里的redir-port

iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892
执行以上命令之后iptables就配置好了,但是重启机器上面的配置又会失效,这时需要安装iptables-persistent来实现iptables配置的持久化。

手动保存配置 iptables-save > /etc/iptables/rules.v4
手动从文件加载配置 iptables-restore /etc/iptables/rules.v4
安装Clash
wget https://github.com/Dreamacro/clash/releases/download/v1.3.0/clash-linux-amd64-v1.3.0.gz

解压并且把二进制文件放到 /usr/bin ,并且加上可执行权限

gzip -d clash-linux-amd64-v1.3.0.gz
sudo mv clash-linux-amd64-v1.3.0 /usr/bin/clash
sudo chmod +x /usr/bin/clash
创建clash配置

创建文件夹

mkdir -p ~/.config/clash
cd ~/.config/clash
vim config.yaml
输入下面基本配置

一般情况只需要往Proxy后面加节点就可以

port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
mode: Rule
log-level: info
dns:
enable: true
ipv6: false
# 其中 53, 5353端口经常是被占用的
listen: 0.0.0.0:5354
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:

- '192.168.2.1'

下面部分则是代理的设置跟规则的设置,这里忽略不写。

Proxy:

...

如果需要校验配置文件是否合规,可以运行clash -t, 成功的话程序会输出”successful”字样。

配置clash服务
vim /etc/systemd/system/clash.service
添加内容

[Unit]
Description=clash daemon

[Service]
Type=simple
User=YOUR USER NAME
ExecStart=/usr/bin/clash -d /home/{{YOUR_USER_NAME}}/.config/clash/
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl start clash.service
systemctl enable clash.service
设置客户端默认网关
在路由器上设置默认网关为旁路由的IP
修改自己电脑的网络配置,设置静态IP,默认网关为旁路由的IP
DNS设置为198.19.0.1(上面已经配置了假IP的转发)
255.255.255.0
常见问题

  1. 运行clash的机器上不了网
    刚配置好之后,旁路由的网关还是采用默认的网关,例如路由器的IP为192.168.2.1,旁路由的IP为192.168.2.101,原本默认的网关是192.168.2.1,后来在路由器的管理界面把默认网关改为192.168.2.101(即旁路由IP),设置完不会马上同步到所有设备,过一会儿旁路由更新了,从主路由器里获取到网关为192.168.2.101,由于这个IP是自己,导致发送网络请求的时候发给了自己,一直死循环了。

ssh远程过去旁路由,ip route看看当前的路由配置

default via 192.168.2.101 dev eth0 src 192.168.2.101 metric 202
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.101 metric 202
查看当前设备IP

ip address
得到IP信息:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
   valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
   valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether b8:27:eb:41:4b:8c brd ff:ff:ff:ff:ff:ff
inet 192.168.2.101/24 brd 192.168.2.255 scope global eth0
   valid_lft forever preferred_lft forever
inet6 fe80::50e0:43d3:b9f4:c7d6/64 scope link
   valid_lft forever preferred_lft forever

3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000

link/ether b8:27:eb:14:1e:d9 brd ff:ff:ff:ff:ff:ff

4: ip_vti0@NONE: mtu 1480 qdisc noop state DOWN group default qlen 1000

link/ipip 0.0.0.0 brd 0.0.0.0

5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default

link/ether 02:42:52:a5:42:48 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
   valid_lft forever preferred_lft forever

由此可见,旁路由的网关为192.168.2.101,其实是自己。这时只要修改一下旁路由的网关就好了,也是用ip route命令

ip route add default via 192.168.2.1

  1. 通过 ip route 设置网关过一会儿失效
    不同的设置不同系统都有各自的持久化保存的方法,这里简单列举几个

1) 树莓派 raspberrypi os

echo 'ip route add default via 192.168.2.1' > /etc/dhcpcd.exit-hook
2) Ubntu 20.04 Server

修改 /etc/netplan/ 里面的yaml配置,

eth0:

dhcp4: true
dhcp4-overrides:
    use-routes: false
gateway4: 192.168.2.1

相关网站推荐
1、FreeBuf
国内关注度最高的全球互联网安全媒体平台,爱好者们交流与分享安全技术的社区,网络安全行业门户。
https://www.freebuf.com/
2、看雪
看雪论坛是个软件安全技术交流场所,为安全技术爱好者提供一个技术交流平台和资源。
https://bbs.kanxue.com/
3、吾爱破解
吾爱破解论坛是致力于软件安全与病毒分析的非营利性技术论坛。
https://www.52pojie.cn/
4、阿里云先知社区
一个开放型技术平台。https://xz.aliyun.com/
5、腾讯玄武安全实验室
各种CVE漏洞。
国家信息安全漏洞库 https://www.cnnvd.org.cn/
VULHUB信息安全漏洞门户 http://cve.scap.org.cn/

6.最全的CTF和在线攻防网站总结
http://www.hackdig.com/10/hack-803622.htm
推荐书籍入门
《白帽子讲Web安全》 2012
《Web安全深度剖析》2015
《Web安全攻防 渗透测试实战指南》2018进阶
《WEB之困-现代WEB应用安全指南》 2013
《内网安全攻防渗透测试安全指南》 2020
《Metasploit渗透测试魔鬼训练营》2013
《SQL注入攻击与防御》2010
《黑客攻防技术宝典-Web实战篇(第2版)》
《日志管理与分析权威指南》
《kali Linux高级渗透测试》
《黑客社会工程学攻防演练》
《XSS跨站脚本攻击剖析与防御》
《黑客攻防实战之入门到精通》