如何通过iptables和squid配置全局代理

网络环境如下:
机器1(可上外网):
enp0s3: 192.168.100.55/24(可上网的网卡)
enp0s8: 192.168.56.103/24(内网)

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.1   0.0.0.0         UG    0      0        0 enp0s3
0.0.0.0         192.168.100.1   0.0.0.0         UG    100    0        0 enp0s3
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 enp0s8
192.168.100.0   0.0.0.0         255.255.255.0   U     100    0        0 enp0s3

机器2(内网):
enp0s3: 192.168.56.101/24

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.56.103  0.0.0.0         UG    0      0        0 enp0s3
192.168.56.0    0.0.0.0         255.255.255.0   U     100    0        0 enp0s3

如何让机器2通过机器1上网?

我已经在机器1上搭建了squid,通过在机器2上配置

export http_proxy=http://192.168.56.103:3128
export https_proxy=http://192.168.56.103:3128

是可以正常上网的,但是发现有些程序不走系统代理。听说用 iptables 可以实现全局的代理,但是不知道怎么设置。

我尝试了在机器1上打开转发echo "1" > /proc/sys/net/ipv4/ip_forward
添加了iptables -t nat -A POSTROUTING -o enp0s3 -s 192.168.56.0/24 -j SNAT --to 192.168.100.55

为机器2添加了route add default gw 192.168.56.103

但是依旧无法上网。

阅读 3.7k
1 个回答

大概有两种方式,看你的网络结构。

  1. 设置机器2 的网关为 机器1。这样机器2 不需要设置代理,不需要改任何系统或软件设置。
  2. 不改机器2 的网关(假定它的网关不是机器1)。这要在机器2 上添加 iptables 规则,使 http 流量重定向到 机器1。

这种代理叫透明代理,设置方法参考

  1. https://docs.mitmproxy.org/st...
  2. https://tldp.org/HOWTO/Transp...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题