部分信息已更新:
Last login: Wed Aug 31 18:10:24 2022
root@pve:~# ip route
default via 192.168.132.1 dev vmbr0 proto kernel onlink
192.168.132.0/24 dev vmbr0 proto kernel scope link src 192.168.132.4
root@pve:~#
root@pve:~# ping 10.0.0.26
PING 10.0.0.26 (10.0.0.26) 56(84) bytes of data.
64 bytes from 10.0.0.26: icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from 10.0.0.26: icmp_seq=2 ttl=64 time=0.051 ms
10.0.0.26 是 openwrt lxc 的 wan 接口从上游路由器获得的 ip,它回复了来自 pve 主机的请求,我猜测是通过环回,因为 ping 10.0.0.1 或任何 10.0.xx 都不会得到回复。
--
我遇到了无法将我的 openwrt vm 迁移到 lxc 的情况。我使用 vm 通过其虚拟网桥来路由和管理主机的网络,但是当我在 lxc 上使用相同的配置时,它不起作用。
/etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.132.4 pve
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
/etc/网络/接口
iface enp3s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.132.4/24
gateway 192.168.132.1
bridge-ports none
bridge-stp off
bridge-fd 0
auto vmbr1
iface vmbr1 inet manual
bridge-ports enp3s0
bridge-stp off
bridge-fd 0
210.conf
cores: 1
memory: 128
net0: name=eth0,bridge=vmbr1,hwaddr=CA:2B:9D:E6:52:08,type=veth
net1: name=eth1,bridge=vmbr0,hwaddr=FA:24:4E:32:4B:9B,type=veth
ostype: unmanaged
rootfs: datastore1:210/vm-210-disk-0.raw,size=204M
swap: 512
OpenWrt容器的/etc/config/network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'wan'
option ifname 'eth0'
option proto 'dhcp'
config interface 'wan6'
option proto 'dhcpv6'
option ifname '@wan'
option reqaddress 'try'
option reqprefix 'auto'
config interface 'lan'
option proto 'static'
option ifname 'eth1'
option type 'bridge'
option netmask '255.255.255.0'
option ipaddr '192.168.132.1'
我的上游路由器 IP 是 10.0.0.1
从容器 (192.168.132.1) ping 到任何地方(包括主机、上游 LAN 和公共区域)=> 有效
从主机 (192.168.132.4) ping 192.168.132.1 => 成功
从主机 (192.168.132.4) ping 外部 10.0.0.1 => 不起作用
它曾经在 vm 上运行,但在 lxc 上似乎情况不同。
请解释一下如何解决这个问题。
答案1
您所需要的是所谓的 NAT 发夹(又名 NAT 环回、NAT 反射):
NAT loopback, [...] is a feature in many consumer routers which permits the access of a service via the public IP address from inside the local network.
为什么它不起作用?您在问题中提供的 IPTables DNAT 规则指定了此规则应应用到的传入接口:-i eth0。但是,您的流量不是来自 eth0,而是来自某个虚拟网络接口或其他什么。只需删除对 eth0 的此限制就足以使其正常工作。
或者,可以向 lxcbr0 添加单独的规则:
iptables -t nat -A PREROUTING -i lxcbr0 -p tcp --dport 443 --
目标 80.xxx -j DNAT --to 10.0.3.100:443
答案2
好吧,我只需重新启动防火墙服务直到应用默认策略即可解决此问题。我在启动脚本中添加了以下语句:
until $(iptables -t nat -L PREROUTING |grep -q 'zone_lan_prerouting')
do
/etc/init.d/firewall restart
sleep 1
done
因此/etc/rc.local
看起来像这样:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
until $(iptables -t nat -L PREROUTING |grep -q 'zone_lan_prerouting')
do
/etc/init.d/firewall restart
sleep 1
done
exit 0
当它是 lxc 时,似乎无法检测到网络变化,因此不会触发服务重新启动,不需要除默认值之外的其他策略。