iptables 太他妈难用了

2023-02-11 19:05:58 +08:00
 huiyanpohundh123

搞了一下午,想在部署了 docker 的机器上搞个透明代理,看了一天也没看懂 docker 的 nat 是怎么配的,模拟怎么也跑不通

话说有了第一条规则后,后面的规则还有屁用啊

10655 次点击
所在节点    程序员
68 条回复
huiyanpohundh123
2023-02-11 23:09:40 +08:00
@0o0O0o0O0o 没用 tproxy 就是用了 nat 表
huiyanpohundh123
2023-02-11 23:10:15 +08:00
@digimoon 我用的是桥接模式,他桥接的实现就是用了 iptables 所以我想看懂 好改
huiyanpohundh123
2023-02-11 23:10:59 +08:00
@2503 这个太简单了 还没 chatgpt 懂得多
cest
2023-02-11 23:20:09 +08:00
可以用 network host 就
每个 docker 自己一个 lxc ,接下来随便你了
docker 的网路就是一坨
wwbfred
2023-02-11 23:52:16 +08:00
iptables 对新手极其不友好,这也是后来要改版的一个重要原因。
不过习惯了之后新出的那个我都不敢用,因为不知道到底是发生了什么😂
deorth
2023-02-12 00:04:51 +08:00
建议用 nftables
life90
2023-02-12 00:08:29 +08:00
透明代理有两种模式,"tproxy"和"redirect"。我觉得后一种好配置一点。只要做好了标记,就很方便。
网上的教程大部分抄袭不全。如果你能玩懂 mikrotik ROS 这个不会太难。
cubecube
2023-02-12 00:27:48 +08:00
@wwbfred 新的规则更像一坨屎。。云里雾里需要理解的概念更多
lovelylain
2023-02-12 00:31:58 +08:00
你可以给 docker 加 iptables=False 启动参数,自己手工去添加 iptables 规则,都是自己添加的,要弄懂就容易了,我以前用 openwrt 因为它网络变化后会重启 iptables 导致 docker 添加的规则失效,所以都是手工添加,让事情在掌控中。另外针对你的目的,要实现部分网站走代理,部分直连,还要对本机、局域网、桥容器、host 容器都做到透明代理,本身就是很复杂的。
wwbfred
2023-02-12 00:35:08 +08:00
@cubecube 最怕的就是这个,从一坨屎强制转移到另一坨屎,学习成本还贼高。
ermeow
2023-02-12 00:54:08 +08:00
建议执行 iptables -L 的时候加个-v
flush9f
2023-02-12 01:02:22 +08:00
不是可以设置 network namespace ,这样 docker 就可以设置自己的路由了
vonsy
2023-02-12 03:03:54 +08:00
试了试,docker 可以当透明网关 /代理
用的是斐讯 N1,刷的 NDM, linux 应该也可以, macos 不行,好像 macvlan 有问题
# 创建网络,网卡混杂模式
ip link set eth0 promisc on
docker network create -d macvlan --subnet=2.2.2.0/24 --gateway=2.2.2.1 -o parent=eth0 macnet

# 转发用的 clash redir
docker run -d \
-it \
--name=clash \
--network macnet \
--ip 2.2.2.77 \
--mac-address 32:D8:E2:AE:93:77 \
--ulimit nofile=16384:65536 \
--cap-add=NET_ADMIN \
--privileged=true \
-e TZ=Asia/Shanghai \
-p 7892:7892 \
golang:latest \
/bin/sh

# 安装,配置 clash
go install github.com/Dreamacro/clash@latest
vi ./bin/config.yaml
bin/clash -f bin/config.yaml

# 来自 https://github.com/shadowsocks/shadowsocks-libev#transparent-proxy
iptables -t nat -N SHADOWSOCKS
iptables -t mangle -N SHADOWSOCKS
# VPS 服务器不转发
iptables -t nat -A SHADOWSOCKS -d 54.250.148.164 -j RETURN
# 局域网地址不转发
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 2.2.2.0/24 -j RETURN

# TCP
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 7892
# UDP
ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 7892 --tproxy-mark 0x01/0x01
# 生效
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
iptables -t mangle -A PREROUTING -j SHADOWSOCKS

# 可能用到的包
apt update
apt install -y vim iptables iproute2 iputils-ping curl net-tools ca-certificates
update-ca-certificates

# 安装包可能要临时翻
export http_proxy=http://2.2.2.77:7890
export https_proxy=http://2.2.2.77:7890
unset http_proxy
unset https_proxy

# 测试有没有生效
curl https://ipinfo.io/
curl https://ifconfig.co/
StevenRCE0
2023-02-12 03:49:30 +08:00
你是没试过用 pf 转吧
germain
2023-02-12 04:11:12 +08:00
Docker 和网络基础概念没搞清楚却怪 iptables 难用。
dcoder
2023-02-12 07:50:05 +08:00
@huiyanpohundh123
你理解得没错. iptables 和 Docker 都难用. 混在一起更难用了.
Docker 那些复杂的网络配置, 网络扩展, 简直惨不忍睹...
ltkun
2023-02-12 08:34:59 +08:00
直接改 docker 的主机网关指向透明代理不行吗 我就是这么干的
huiyanpohundh123
2023-02-12 09:33:38 +08:00
@vonsy 大佬,能帮我解释下我题目描述的这个 docker 链为什么生效不,我看第一条规则已经能匹配所有数据包了,target 又是 return ,那么后面的几条规则案例说就没意义了,但是后面这几天规则又是实现网桥功能的关键规则
huiyanpohundh123
2023-02-12 09:35:48 +08:00
@vonsy 这个感觉还要用到网络,我感觉吃不动,怕到时候出了问题都不会改
Yuanandyuan
2023-02-12 09:54:25 +08:00
@huiyanpohundh123 可以用 iptables -t nat -S 看看完全的规则是什么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX