1. 首页
  2. 学术上网
  3. Trojan

openwrt使用trojan教程(二):在openwrt实现trojan透明代理

原创文章,尊重作者,转载请注明原文链接

openwrt上使用trojan,我们继续探索,上一篇教程在openwrt上编译trojan,已经可以让trojan以socks5的方式跑起来,但是我们必须在应用中指定socks5代理,总的来说不够舒服,所以透明代理应该是我们的追求。

openwrt trojan透明代理方案

dnsmasq-full + ipset + iptables + dns-forwarder + redsocks + trojan

透明代理绕不过的就是DNS污染问题,我们需要解决DNS污染,然后解决访问流量的代理。

DNS

这里我们用直接使用dnsmasq指定gfwlist名单中的域名使用DNS服务器8.8.8.8,然后使用dns-forwarder将DNS的UDP转为TCP,再强制访问8.8.8.8的流量被代理。

代理

我们使用dnsmasq-full和ipset,让指定的域名的ip被记录和标记,然后通过iptables将其转发到redsocks转换的trojan代理,其他ip走默认路线。



opwnert下trojan透明代理教程

1、安装trojan开启转发

上一篇教程中我们编译了openwrt上的trojan ipk安装包,你若还没有编译,请参考这篇教程。

编译及安装教程:openwrt上编译trojan ipk并安装

开启转发

echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf

sysctl -p

PS:这里一定注意修改/etc/config/trojan配置文件,将enabled改为1。

2、安装dnsmasq-full ipset dns-forwarder redsocks

安装dnsmasq-full ipset redsocks

opkg update
opkg remove dnsmasq && opkg install dnsmasq-full
opkg install ipset iptables-mod-nat-extra redsocks

安装dns-forwarder

首先我们看一下你的openwrt CPU架构

opkg print-architecture | awk '{print $2}' | grep -v all | grep -v noarch

然后去dns-forwarder网站下载对应架构的ipk:去下载dns-forwarder


将dns-forwarder上传到openwrt或者直接wget下载,然后安装dns-forwarder

opkg install dns-forwarder*

3、配置trojan

我们之前的教程中使用nohup运行trojan,今天我们使用配置trojan自启动,首先我们在trojan server端搭建时获取两个文件。

/usr/src/trojan-cli/config.json
/usr/src/trojan-cli/fullchain.cer

将这两个文件下载并重新命名config.json为trojan.json,然后将修改cert的值为/etc/fullchain.cer

openwrt使用trojan教程(二):在openwrt实现trojan透明代理

然后将trojan.json和fullchain.cer上传到openwrt的/etc/目录下即可。

开启trojan自启动

/etc/init.d/trojan enable

运行trojan

/etc/init.d/trojan start

4、配置dns-forwarder

编辑dns-forwarder配置文件

vi /etc/config/dns-forwarder

修改内容如下,然后保存

config dns-forwarder
option listen_addr '0.0.0.0'
option listen_port '5353'
option dns_servers '8.8.8.8'
option enable '1'

重启dns-forwarder

/etc/init.d/dns-forwarder restart

5、配置redsocks

cat > /etc/redsocks.conf <<-EOF

base {
log_debug = off;
log_info = on;
log = "syslog:local7";
daemon = on;
redirector = iptables;
}

redsocks {
local_ip = 0.0.0.0;
local_port = 12345;
ip = 127.0.0.1;
port = 1080;
type = socks5;

}

EOF

然后重启redsocks


/etc/init.d/redsocks restart

6、配置dnsmasq、ipset、iptables

首先为dnsmasq的配置文件添加conf-dir

echo "conf-dir=/etc/dnsmasq.d" >> /etc/dnsmasq.conf

新建刚才添加的文件夹并进入

mkdir /etc/dnsmasq.d/ && cd /etc/dnsmasq.d/

将配置好的gfwlist下载下来(注意,我把本站加入了代理,其他网站来源于github:gfwlist)

wget https://raw.githubusercontent.com/atrandys/gfwlist/master/gfwlist.conf

新建一个ipset gfwlist表

ipset -N gfwlist iphash

配置iptables将NAT转发到redsocks

iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-ports 12345

配置iptables将openwrt本机转发到redsocks

iptables -t nat -A OUTPUT -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-ports 12345

配置TCP访问8.8.8.8的DNS解析流量走代理

iptables -t nat -A PREROUTING -p tcp -d 8.8.8.8/32 -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -d 8.8.8.8/32 -j REDIRECT --to-ports 12345

然后重启dnsmasq,用浏览器访问一下google,看一下透明代理是否生效吧。

/etc/init.d/dnsmasq restart 若需要配置以上规则开机自动添加,将以上ipset和iptables开头的5条命令逐行加入到/etc/firewall.user文件内容的末尾即可。

原创文章,作者:atrandys,如若转载,请注明出处:https://www.atrandys.com/2020/2343.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(19条)

  • 小白 2020年4月4日 下午6:00

    问一下”local_addr”: “0.0.0.0”,改成”local_addr”: “127.0.0.1”,
    然后dns-forwarder
    config dns-forwarder
    option listen_addr ‘0.0.0.0’
    改成
    config dns-forwarder
    option listen_addr ‘127.0.0.1’
    可行吗

    • atrandys 回复 小白 2020年4月4日 下午11:30

      可以

    • 小白 回复 atrandys 2020年4月5日 下午10:36

      但是好像不行啊!

  • 小白 2020年4月2日 下午10:11

    感谢大佬。这边还是成功在原生版本上trajon透明代理了。
    有几个事情:第一1.15.1目前有nat透明代理模式了,恩山上面有一个帖子基于lz的教程改造了一下:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=3708391&page=1&extra=#pid8667698
    lz有空再结合他的改造一下吗!
    第二目前可以做一下结合 https://github.com/pexcn/openwrt-chinadns-ng
    搞点事情不,最后还是要谢谢楼主你的辛苦劳动

    • atrandys 回复 小白 2020年4月3日 上午8:37

      chinadns应该没有用,我们已经把需要代理的域名加到了dnsmasq的名单中,只有这些的解析走代理到国外8.8.8.8,不在名单的用你配置的国内解析服务器。

    • atrandys 回复 小白 2020年4月3日 上午8:46

      关于chinadns可参考这篇分析:https://cyberloginit.com/2019/04/08/chinadns-code-analysis.html

  • 小白 2020年4月1日 上午7:44

    大佬我想问一下加入redsocks是原理(因为看到基于你的教程,有人没有加redsocks),还有就是dnsmasq.d目录后我看到别的地方都会执行uci get [email protected][0].confdir,然后看反馈,最后问一下新建一个ipset gfwlist表这一步是在root下面执行还是在dnsmasq.d目录下执行

    • atrandys 回复 小白 2020年4月1日 上午9:01

      执行新建ipset命令,在什么目录都没问题

  • 小白 2020年3月26日 下午7:57

    反馈一个bug 一个问题:
    bug:echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf
    应该要把“ ”去掉,实测木有去掉报错,
    第二个是问题:
    如果是合租或者其他人分享出来的服务器,那么在服务器端的fullchain.cer这么获取了,难道是要知道服务器的账号和密码吗
    如果在:
    “ssl”: {
    “verify”: false, #变成false
    “verify_hostname”: true,
    “cert”: “”, #这个可以空出来吗!
    会有什么影响!谢谢

    • 小白 回复 小白 2020年3月26日 下午8:07

      因为在使用苹果的小火箭没有涉及到cer证书的问题,所以特来求解答

    • atrandys 回复 小白 2020年3月27日 上午9:12

      可以的

  • 小白 2020年3月15日 下午1:44

    老哥谢谢你的编译教程,我已经成功编译ipk了。在openwrt上面我推荐老大可以看一下飞羽的《Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动科学上网》地址:https://cokebar.info/archives/664
    飞羽是依靠ss+chinaDNS+dnsmasq gfw实现爬墙的,目前v2等都是基于go的,而ss目前已经不符合时代了,只有trojan是基于c++具有广泛的兼容性,适用那些老旧且复制的cpu构架,如果老大方便可以写一个luci,如果没有也可以配置文件和代码,其他的可以借用A大的源。谢谢

  • iiii.im 2020年3月14日 下午6:34

    能否请教博主用的是什么主题

  • 1 2020年3月4日 上午7:32

    niubi,成功了!!!那么问题来了,我要怎么关掉它

    • atrandys 回复 1 2020年3月4日 上午8:46

      目前只能用命令,/etc/init.d/trojan stop
      有空做个luci app界面管理

    • DreamYA 回复 atrandys 2020年3月7日 下午11:01

      新的luci app可以配合smartDNS使用吗?

    • 小白 回复 atrandys 2020年3月15日 上午10:07

      老哥有空可以参考一下飞羽的那个教程谢谢

    • atrandys 回复 小白 2020年3月15日 上午10:16

      什么内容呀。。