ASUS RT-AX56U (Asuswrt-Merlin 導入済) で透過プロキシサーバ (go-transproxy) を動かしました.
ルータ下の IP アドレスは 192.168.50.0/24 で
プロキシサーバは 172.16.0.1 の 8080 番で Listen している前提です.
go-transproxy の本体は /jffs 下に配置しました.実機でビルドしてもいいですが,環境構築の手間がかかることと,それなりに時間がかかるので下の注意事項に気を付けながらクロスコンパイルすることを推奨します.
iptables 設定
ipset -N localnet iphash
ipset -A localnet 192.168.50.0/24
ipset -A localnet 172.16.0.0/24
ipset -A localnet 172.16.10.0/24
ipset -A localnet 172.16.20.0/24
ipset -A localnet 172.16.30.0/24
ipset -A localnet 172.16.40.0/24
ipset -A localnet 172.16.50.0/24
ipset -A localnet 172.16.60.0/24
iptables -A PREROUTING -t nat -m set ! --match-set localnet dst -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7080
iptables -A PREROUTING -t nat -m set ! --match-set localnet dst -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 7443
iptables -t nat -A OUTPUT -m set ! --match-set localnet dst -p tcp -o br0 --dport 80 -j DNAT --to 127.0.0.1:7080
iptables -t nat -A OUTPUT -m set ! --match-set localnet dst -p tcp -o br0 --dport 443 -j DNAT --to 127.0.0.1:7443
iptables -t nat -A OUTPUT -m set ! --match-set localnet dst -p tcp -o eth0 --dport 80 -j DNAT --to 127.0.0.1:7080
iptables -t nat -A OUTPUT -m set ! --match-set localnet dst -p tcp -o eth0 --dport 443 -j DNAT --to 127.0.0.1:7443
transproxy
no_proxy='127.0.0.1,localhost' http_proxy=http://172.16.0.1:8080 /jffs/transproxy -tcp-proxy-dports 0 -disable-iptables -http-proxy-listen :7080 -https-proxy-listen :7443 -loglevel info
ビルド時に気をつけること
GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build -o bin/transproxy cmd/transproxy/main.go
CGO_ENABLED=0 を付けないと not found になる.(ライブラリが足りてない?)
起動時のスクリプト
Web GUI の管理→システムから "Enable JFFS custom scripts and configs" を有効にする
スクリプトは /jffs/scripts/services-start
に書く
こんなイメージ
#!/bin/sh
hoge & \
fuga & \
exec piyo
参考文献
go-transproxy
https://github.com/wadahiro/go-transproxy
Asuswrt-Merlin
https://www.asuswrt-merlin.net/
ipset 関係
https://serverfault.com/questions/6989/iptables-multiple-source-ips-in-single-rule