我正在尝试使用 Ubuntu 服务器 12.04 设置 squid 代理服务器
我对 Ubuntu 还很陌生,但我已经设法完成了一些简单的事情。
我购买了第二个 PCI 接口并设法将其安装在服务器上。
我的目标是将所有数据包从一个接口(或子网)转发到另一个接口(或子网)。我认为这是配置 squid 本身之前的第一步。
从我的 Ubuntu 服务器,我可以 ping 通两个子网中的设备。但是从位于子网 192.168.0.0 /24 中的笔记本电脑,我无法 ping 通位于另一个子网 192.168.1.0/24 中的路由器。
当从我的 Ubuntu 服务器发送 ICMP 请求时,路由器和笔记本电脑都会响应。
我还在 sysctl.conf 中激活了 net.ipv4.ip_forward=1
sudo ip route 的输出:
default via 192.168.1.254 dev eth1 metric 100
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.200
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.200
sudo iptables -nvL 的输出:
Chain INPUT (policy ACCEPT 339 packets, 55782 bytes)
Chain FORWARD (policy ACCEPT 185 packets, 12382 bytes)
Chain OUTPUT (policy ACCEPT 276 packets, 25481 bytes)
你知道为什么这个设置不起作用吗?我肯定我漏掉了什么。
答案1
问题在于您尝试联系的路由器不知道如何将数据包路由回笔记本电脑,因为它不知道 192.168.0.0/24 子网。笔记本电脑的数据包到达路由器,但响应数据包要么被发送到错误的地方(互联网),要么根本没有发送。
您需要为路由器配置一条通过 192.168.0.200 到 192.168.0.0/24 的静态路由。具体操作取决于您拥有的具体路由器,但请查看 Web 界面上有关路由的部分。
答案2
要使 Linux 能够在接口之间路由数据包,请运行以下命令打开 IPv4 路由:
sysctl -w net.ipv4.ip_forward=1
要使其成为永久性更改,请将其添加到/etc/sysctl.conf
:
net.ipv4.ip_forward = 1